странное поведение Python со смешением глобальных переменных / параметров и функции с именем 'top'

Следующий код (не непосредственно в интерпретаторе, но выполнить как файл)

def top(deck):
    pass

def b():
    global deck

выдает ошибку

SyntaxError: name 'deck' is local and global

на python2.6. 4 и

SyntaxError: name 'deck' is parameter and global

на python 3.1

python2.4, похоже, принимает этот код, как и интерактивный интерпретатор 2.6.4.

Это уже странно; почему «колода» конфликтует, если она глобальна в одном методе и параметр в другом?

Но все становится еще страннее. Переименуйте «top» в любое другое, и проблема исчезнет.

Кто-нибудь может объяснить такое поведение? Я чувствую, что здесь не хватает чего-то очень очевидного. Влияет ли имя «top» каким-либо образом на некоторые внутренние компоненты области видимости?

Обновление

Это действительно похоже на ошибку в ядре python. Я отправил отчет об ошибке .

20
задан Ivo van der Wijk 1 October 2010 в 11:37
поделиться