例如:assginment语句将声明一个新的局部变量.
foo = 'global'
def func1():
foo = 'func1'
def func2():
foo = 'local variable in func2'
Run Code Online (Sandbox Code Playgroud)
使用全局声明将在全局使用foo:
def func2():
global foo
foo = 'global changed in func2' #changed the foo value in global scope
Run Code Online (Sandbox Code Playgroud)
如何在func1范围中更改变量foo?
谢谢你的帮助.
编辑:
谢谢Brandon Craig Rhodes,我终于理解了你的意思.
如果嵌套的范围超过3个,我可以将变量存储在列表中.
foo = ['global', 'function1', 'function2']
def func1():
foo[1] = 'func1'
def func2():
foo[2] = 'func2'
foo[1] = 'func1 modified in func2'
Run Code Online (Sandbox Code Playgroud)
我实际上只使用了一个全局变量.
所以,如果有两个嵌套函数,我们可以使用
nonlocal foo
Run Code Online (Sandbox Code Playgroud)
和
global foo
Run Code Online (Sandbox Code Playgroud)
如果嵌套了三个以上的函数,
并且每个函数在其他函数范围内使用变量,
为什么不声明全局列表变量?
谢谢你的帮助!!!
几乎所有的javascript书都说
在声明变量时总是使用var关键字,因为没有var,变量将被声明为全局变量.
那么,为什么不删除var关键字,将默认声明作为本地范围?像Python一样,如果你想使用全局变量,你写:
global foo;
Run Code Online (Sandbox Code Playgroud)
我们几乎所有时间都使用局部变量,不是吗?有充分的理由吗?谢谢你的帮助.
编辑:感谢您的所有帮助,我认为必须有一个很好的理由表明使用var更好,所以我没有尝试改变它的语言.
在web.py模板中:index.html我写道:
$def with(s)
<img src="$s.filename.png" />
Run Code Online (Sandbox Code Playgroud)
s.filename的值是"picuture"所以我想要打印
<img src="picture.png" />
Run Code Online (Sandbox Code Playgroud)
但是我怎么能告诉web.py模板系统不要使用$ s.filename.png只使用$ s.filename并添加".png"呢?