gpt4 book ai didi

python - 在被调用函数和调用函数之间共享 Python 范围

转载 作者:太空狗 更新时间:2023-10-29 19:36:50 24 4
gpt4 key购买 nike

Python 中有没有一种方法可以管理范围,以便调用函数中的变量在被调用函数中可见?我想要类似下面的东西

z = 1

def a():
z = z * 2
print z

def b():
z = z + 1
print z
a()
print z

b()

我想得到以下输出

2
4
2

这个问题的真正解决方案就是将 z 作为变量传递。我不想这样做。

我有一个庞大而复杂的代码库,其中包含各种专业水平的用户。他们目前接受的培训是传递一个变量,现在我必须添加另一个变量。我不相信他们会通过所有函数调用始终如一地传递第二个变量,所以我正在寻找一种维护接口(interface)的替代方法。这很有可能是不可能的。

最佳答案

我想这就是您要找的。如果您控制内部函数,并且您正在寻找的变量已经在调用链中某处的范围内,但您不希望您的用户必须在调用本身中包含该变量。您显然不需要 global 关键字,因为您不希望内部赋值影响外部作用域。

使用 inspect 模块可以访问调用上下文。 (但是,请注意,它有些脆弱。您应该只将 CPython 用于非线程。)

import inspect

def calling_scope_variable(name):
frame = inspect.stack()[1][0]
while name not in frame.f_locals:
frame = frame.f_back
if frame is None:
return None
return frame.f_locals[name]

z = 1

def a():
z = calling_scope_variable('z')
z = z * 2
print z

def b():
z = calling_scope_variable('z')
z = z + 1
print z
a()
print z

b()

这确实给出了正确答案:

2
4
2

关于python - 在被调用函数和调用函数之间共享 Python 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14692071/

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