т. Е. У нас есть глобальная декларация, но не локальная.Как сделать переменную (действительно) локальной процедурой или функцией
«Обычно» аргументы являются локальными, я думаю, или они, конечно, ведут себя так. Однако, если аргумент, скажем, применяется список и метод, который изменяет список, могут возникнуть некоторые неожиданные (для меня) результаты.
У меня есть 2 вопроса: что такое правильный способ гарантировать, что переменная действительно является локальной? я завелся, используя следующую команду, которая работает, но вряд ли это может быть правильный способ сделать это:
def AexclB(a,b):
z = a+[] # yuk
for k in range(0, len(b)):
try: z.remove(b[k])
except: continue
return z
ОТСУТСТВУЕТ + [], «а» в вызывающей рамки модифицируется, что не требуется , (Вопрос здесь используется метод списка,
Дополнительный вопрос не в том, почему там нет «местная» декларация?
Наконец, пытаясь прикрепить это вниз, я сделал различные функции мыши Mickey, которые все вели себя, как и ожидалось, кроме последнего:
def fun4(a):
z = a
z = z.append(["!!"])
return z
a = ["hello"]
print "a=",a
print "fun4(a)=",fun4(a)
print "a=",a
который произвел следующие действия на консоли:
a= ['hello']
fun4(a)= None
a= ['hello', ['!!']]
...
>>>
'None' ре sult не ожидалось (мной).
Python 2.7 btw в случае, что имеет значение.
PS: Я пробовал искать здесь и в другом месте, но не смог найти что-либо соответствующее точно - есть много о том, чтобы сделать переменные глобальными, к сожалению.
'z.append ([ "!!"])' 'возвращает None', потому что это способ на месте, и вы переназначение, что 'z' и возвращает его. – Volatility
Я думаю, что ваша корневая проблема заключается в том, что вы предполагаете, что переменные Python работают как, скажем, переменные C++. Они этого не делают. _Values_ имеют типы, ячейки памяти и т. Д. Переменные - это просто имена этих значений. Вы можете назначить много имен - локальных или глобальных или иначе - для значения, и значение не имеет значения. – abarnert
Речь идет не о переменных. * Variables * 'a' и' b' являются локальными для вашей функции. То, что не является локальным, является * объектом *, переданным как аргумент 'a' вашей функции. Списки и другие объекты в Python не привязаны к одной переменной; так как многие переменные, как вы хотите, могут ссылаться на один и тот же объект. В отличие от, скажем, C++, Python не будет автоматически делать копию каждый раз, когда вы что-то пропускаете. – user2357112