почему эта программа на Python выводит True - PullRequest
7 голосов
/ 07 августа 2009
x=True
def stupid():
    x=False
stupid()
print x

Ответы [ 8 ]

18 голосов
/ 07 августа 2009

Вам не нужно объявлять локальную переменную функции в Python. «X = False» относится к локальной переменной x для stupid (). Если вы действительно хотите изменить глобальный х внутри тупой:

def stupid():
    global x
    x=False
10 голосов
/ 07 августа 2009

Чтобы ответить на следующий вопрос, используйте global:

x=True
def stupid():
    global x
    x=False
stupid()
print x
6 голосов
/ 07 августа 2009

Потому что область действия x локальна для функции stupid (). как только вы вызываете функцию, и она заканчивается, вы выходите за ее пределы, и вы печатаете значение «x», которое определено вне функции stupid () - и, x, которое определено внутри функции stupid () больше не существует в стеке (как только эта функция заканчивается)

изменить после вашего комментария:

на external x ссылаются, когда вы печатаете его, так же, как вы это делали.

На внутренний x можно ссылаться, только когда вы внутри функции stupid (). так что вы можете печатать внутри этой функции, чтобы увидеть, какое значение содержит х внутри нее.

О "глобальном"

  • работает и отвечает на вопрос, видимо
  • не очень хорошая идея использовать все это часто
  • вызывает проблемы с читаемостью и масштабируемостью (и, возможно, больше)
  • В зависимости от вашего проекта вы можете пересмотреть использование глобальной переменной, определенной внутри локальной функции.
5 голосов
/ 07 августа 2009

Если этот код находится внутри функции, global не будет работать, потому что тогда x не будет глобальной переменной. В Python 3.x было введено ключевое слово nonlocal, которое обеспечивало бы работу кода независимо от того, находится ли он на верхнем уровне или внутри функции:

x=True
def stupid():
    nonlocal x
    x=False
stupid()
print x
3 голосов
/ 07 августа 2009

Если вы хотите получить доступ к глобальной переменной x из метода в python, вам нужно сделать это явно:

x=True
def stupid():
    global x
    x=False

stupid()
print x
2 голосов
/ 07 августа 2009
  • Поскольку вы делаете присвоение x внутри stupid(), Python создает новый x внутри stupid().
  • Если бы вы только читали из x внутри stupid(), Python фактически использовал бы глобальный x, который вы и хотели.
  • Чтобы заставить Python использовать глобальный x, добавьте global x в качестве первой строки внутри stupid().
2 голосов
/ 07 августа 2009

Добавьте «global x» перед x = False в функции, и оно выведет True. В противном случае это два символа «х», каждый в своей области видимости.

2 голосов
/ 07 августа 2009

x в функции stupid () является локальной переменной, поэтому у вас действительно есть две переменные с именем x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...