看看下面的例子从一个全新的Python 3.4命令行启动:
>>> len(globals())
6
>>> len(locals())
6
蝙蝠有6个全局变量和,因为我们在全球范围内目前是,有6个地方变数太多:
>>> a = 1
>>> b = 2
>>> c = 3
>>> len(globals())
9
>>> len(locals())
9
现在我们增加了3个变量,这两个现在9.
>>> def foo():
... a = 1
... b = 2
... print(len(locals()))
... print(len(globals()))
...
现在我们已经添加了功能foo
(这是在全球范围内定义,因此也被全局/当地人当在全球范围内数):
>>> print(len(locals()))
10
>>> print(len(globals()))
10
最后,请注意函数中,只有在函数中的变量是本地人,而全局仍然包含在全球范围内的一切:
>>> foo()
2
10
使用这个逻辑,你可以使用len(locals())
得到的函数中定义的变量/函数的数量和len(globals()) - 6
获得全局中定义的所有变量/函数的列表 范围。
编辑(请注意,所有的下面是一个新鲜的终端)
使用:
sum([not callable(globals()[i]) for i in globals()])
你可以得到的变量(不包括函数)的数量目前在全球范围内。通过在你的代码,然后每个呼叫的顶部添加globs = sum([not callable(globals()[i]) for i in globals()])
因此提出的
>>> a = 1
>>> b = 2
>>> c = 3
>>> sum([not callable(globals()[i]) for i in globals()]) - globs - 1
3
>>> def foo():
... a = 1
... b = 1
... print(len(locals()))
...
>>> foo()
2
>>> sum([not callable(globals()[i]) for i in globals()]) - globs - 1
3
这样:通过指定这一个变量,你就可以得到当前定义的变量列表:
>>> globs = sum([not callable(globals()[i]) for i in globals()])
>>> sum([not callable(globals()[i]) for i in globals()]) - globs - 1 # -1 for globs
0
现在sum([not callable(globals()[i]) for i in globals()]) - globs - 1
将给出定义的变量数量(这是在全局范围内,您可以使用locs = sum([not callable(locals()[i]) for i in locals()])
的类似方法在函数内执行相同的操作)。
编辑2
我不知道有这样做你问的是什么原生的方式,但是你有两个选择:
- 解析脚本(这是一个很大的功夫)
- 请您在每个函数调用结束递增计数器:
>>> num_encountered_locals = 0
>>> def foo():
global num_encountered_locals
a = 1
b = 2
num_encountered_locals += len(locals())
>>> num_encountered_locals
0
>>> foo()
>>> num_encountered_locals
2
>>> foo()
>>> foo()
>>> foo()
>>> num_encountered_locals
8
(出于某种原因,所以我不得不把它放在手动<code>
和<pre>
标签这最后大量的代码将无法正常格式化)
做'LEN(当地人())'和'LEN(全局()) '完成你在找什么? –
我不这么认为。我刚刚尝试了一个简单的测试脚本:a = 1,b = 2,c = 3,我希望len(locals())= 0和len(globals())= 3,但是我得到了11和11. – Astrophe