下面是我的测试脚本:
def main(): #global
n = 1
z = None
def addone(): #local
if not z:
n = n+1
addone()
print n
main()
一旦addone()
函数到达调用线路,我就进入它。
此时,我只能看到变量z
,但看不到n
。你知道吗
现在,如果在赋值之前引用了n
,那么z
应该也是吗?你知道吗
同样,如果我把n=n+1
改成z='hi'
,我就看不到z
!
这与我之前对局部/全局函数的所有看法相反!你知道的越多,你对Python的不了解就越多。你知道吗
问题:
为什么我能看到一个却看不到另一个?
我想在global
前面加上我想重新赋值的变量吗?
最好的解决方案是升级到python3并在内部函数
nonlocal n
中使用。如果您必须坚持使用Python2,那么最好的选择是:像往常一样,“在计算机科学中,没有任何问题不能用额外的间接手段来解决”。通过把
n
列成一个列表(并且总是使用和分配n[0]
),你在某种意义上正是引入了拯救生命的“额外间接层次”。你知道吗好吧,经过一些测试,我意识到这一切都与变量的重新分配有关。你知道吗
例如:
现在,当我在
addone()
函数中时,同时显示n
和z
。这是因为我不再试图重新分配n
,这对我来说是有意义的,以便在局部函数中使用类似名称时保护全局变量不被操纵。你知道吗相关问题 更多 >
编程相关推荐