gpt4 book ai didi

python - 返回 Python 中的封闭范围变量

转载 作者:行者123 更新时间:2023-12-01 01:45:16 27 4
gpt4 key购买 nike

给定

我有一个函数,scope,它可以在封闭的命名空间内声明,即模块函数。感兴趣的变量位于该函数之外。

一般如何访问在任何封闭命名空间中声明的变量/参数及其值?

示例

用于捕获函数变量 (b) 和参数 (c) 的示例伪代码:

a = 1
def func(c=3)
b = 2
def scope():
return ...
return scope()

预期输出

func()
# {'c': 3, 'b': 2}
<小时/>

尝试

我在模块级别取得了一定的成功,例如a = 1:

# module-level
a = 1
def scope():
return {k: v for k, v in globals().items() if not k.startswith("_")}

scope()
# {'a': 1, ...}

我还可以从方法访问类属性,例如b = 2:

# class-level
a = 1
class Klass:
b = 2
def scope(self):
obj = self.__class__
return obj.__dict__

Klass().scope()
# {'b': 2, ...}

我只能部分访问封闭函数内的变量和参数:

# function-level
a = 1
def func(c=3):
b = 2
def scope():
obj = func
return obj.__code__.co_varnames
return scope()

func()
# ('c', 'b', 'scope')

虽然 __code__.co_varnames 成功给出了封闭变量(不包括 a),但我也对这些值感兴趣(例如 {'c': 3, 'b': 2})。

我做了许多未提及的尝试,包括 inspect 函数、其他代码对象方法、dir() 和对象特殊方法。我的偏好是实现更通用和惯用的代码来检测封闭 namespace 中的变量,尽管任何建议都值得赞赏。

我也了解 Python 习惯用法和这个问题的本质。我仍然对其可能性感兴趣,并且我感谢任何愿意超越常规的人。

最佳答案

虽然 python 会给你一些方法来做到这一点,但你真的不想这样做。函数/类/等不应将其内部暴露给调用代码,因为这会破坏抽象并使代码变得脆弱。函数应该接受参数并返回输出值,但不应公开内部算法,尤其是变量名称。

关于python - 返回 Python 中的封闭范围变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51432553/

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