gpt4 book ai didi

python - 是否可以修改python中位于外部(封闭)但不是全局范围内的变量?

转载 作者:IT老高 更新时间:2023-10-28 21:11:24 29 4
gpt4 key购买 nike

考虑这个例子:

def A():
b = 1
def B():
# I can access 'b' from here.
print(b)
# But can i modify 'b' here?
B()
A()

对于 B 函数中的代码,变量 b 位于非全局的封闭(外部)范围内。如何在 B 中修改 b?如果我直接尝试会出错,并且使用 global 并不能解决问题,因为 b 不是全局的。


Python 实现了 词法而非动态 作用域——几乎与所有现代语言一样。这里的技术将不允许访问调用者的变量 - 除非调用者也恰好是一个封闭函数 - 因为调用者不在范围内。有关此问题的更多信息,请参阅 How can I access variables from the caller, even if it isn't an enclosing scope (i.e., implement dynamic scoping)? .

最佳答案

Python 3 上,使用 nonlocal keyword :

The nonlocal statement causes the listed identifiers to refer to previously bound variables in the nearest enclosing scope excluding globals. This is important because the default behavior for binding is to search the local namespace first. The statement allows encapsulated code to rebind variables outside of the local scope besides the global (module) scope.

def foo():
a = 1
def bar():
nonlocal a
a = 2
bar()
print(a) # Output: 2

Python 2 上,使用可变对象(如列表或字典)并改变值而不是重新分配变量:

def foo():
a = []
def bar():
a.append(1)
bar()
bar()
print a

foo()

输出:

[1, 1]

关于python - 是否可以修改python中位于外部(封闭)但不是全局范围内的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8447947/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com