gpt4 book ai didi

python - 如何在嵌套函数中捕获当前命名空间?

转载 作者:太空宇宙 更新时间:2023-11-03 11:49:15 24 4
gpt4 key购买 nike

假设有以下情况:

def outer(foo, bar, baz):
frobozz = foo + bar + baz

def inner(x, y, z):
return dict(globals().items() + locals().items())

return inner(7, 8, 9)

inner 返回的值是通过合并 globals() 返回的词典获得的词典和 locals() , 如图所示。一般1,此返回值将包含 foo 的条目, bar , baz , 和 frobozz ,即使这些变量在 inner 中可见,因此可以说属于 inner的命名空间。

一种促进捕获 inner 的方法的命名空间将是以下 kluge:

def outer(foo, bar, baz):
frobozz = foo + bar + baz

def inner(x, y, z, _kluge=locals().items()):
return dict(globals().items() + _kluge + locals().items())

return inner(7, 8, 9)

有没有更好的方法来捕获inner的命名空间比这种杂乱无章?


1 除非,也就是说,具有这些名称的变量恰好出现在当前的全局命名空间中。

最佳答案

这不是动态的,很可能不是最好的方法,但您可以简单地访问 inner 中的变量,将它们添加到它的“命名空间”:

def outer(foo, bar, baz):
frobozz = foo + bar + baz

def inner(x, y, z):
foo, bar, baz, frobozz
return dict(globals().items() + locals().items())

return inner(7, 8, 9)

您还可以将 outer 函数的局部变量存储到一个变量中,并在 inner 的返回值中使用该变量:

def outer(foo, bar, baz):
frobozz = foo + bar + baz
outer_locals = locals()
def inner(x, y, z):
return dict(outer_locals.items() + globals().items() + locals().items())
return inner(7, 8, 9)

关于python - 如何在嵌套函数中捕获当前命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32037190/

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