Меня очень смущает поведение ниже. Случаи 1, 3 и 4 выполняются так, как я ожидал, но случай 2 - нет. Почему случай 2 позволяет функции изменять значение словаря в глобальном масштабе, даже если словарь никогда не возвращается функцией? Основная причина, по которой я использую функции, состоит в том, чтобы изолировать все функции от остальной части кода, но это не представляется возможным, если я предпочитаю использовать те же имена переменных внутри функции. Я был в понимании, что все, что явно определено в функции, является локальным для этой функции, но это, похоже, не так, если словарь определен и передан как вход в функцию.. p >
Python 2.7.2+ (default, Oct 4 2011, 20:06:09)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
============= Случай 1 ===============
>>> def testfun1(a):
... a=2
...
>>> a=0
>>> testfun1(a)
>>> a
0
============= Случай 2 ===============
>>> def testfun2(b):
... b['test']=2
...
>>> b={}
>>> testfun2(b)
>>> b
{'test': 2}
============= Случай 3 ===============
>>> def testfun3():
... c=2
...
>>> c=0
>>> testfun3()
>>> c
0
============= Случай 4 =============== (объясняется этим вопросом: Глобальные словари не нуждаются в ключевом слове global для их изменения?)
>>> def testfun4():
... d['test']=10
...
>>> d={}
>>> testfun4()
>>> d
{'test': 10}