获取当前范围内所有变量及其值的字典

问题描述 投票:36回答:6

请考虑以下代码段:

globalVar = 25

def myfunc(paramVar):
    localVar = 30
    print "Vars: {globalVar}, {paramVar}, {localVar}!".format(**VARS_IN_SCOPE)

myfunc(123)

VARS_IN_SCOPE是我之后要使用的命令,其中包含globalVarparamVarlocalVar等。

我希望基本上能够引用字符串内当前作用域内的所有变量。因此,预期的输出将是:

Vars: 25, 123, 30

我可以通过将**dict(globals().items() + locals().items())传递到format()来实现。这始终是正确的,还是在某些极端情况下此表达式将无法正确处理?

重写以澄清问题。

python
6个回答
36
投票

[在合并时合并两个字典的最佳方法是dict(globals(), **locals())

合并全局变量和本地变量的方法缺少(a)内置函数(我想这是故意的,即您不认为内置函数是“变量” ...但是,如果您选择这样做,它们可能就是这样!- )和(b)(如果您使用的是[[nested)函数,则是封闭函数局部的任何变量(没有一种很好的方法来获取所有those的字典,再加上-仅那些在嵌套函数中显式访问的函数(即其“自由变量”)无论如何都作为闭包中的单元生存)。]

我想这些问题对您的预期用途并不重要,但是您确实提到了“拐角案例” ;-)。如果您需要覆盖它们,可以使用多种方法来获取内置的(很简单)和(不是那么容易)所有单元格(来自您在嵌套函数中明确提到的封闭函数的变量)thefunction.func_code.co_freevars以获取名称,thefunction.func_closure获取单元格,每个单元格上的cell_contents获取其值)。 (但是,请记住,这些将只是来自嵌套函数代码中

显式访问

的封闭函数中的变量!)。

8
投票
这符合您的意图吗?

2
投票

2
投票

1
投票

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.