如何计算脚本中分配的变量数?
例如,line_no = 80有num_globals =y和num_locals = z。
编辑
我知道局部变量并不都属于一个大的集合局部变量范围,它们位于不同的局部变量范围内,但是是否有一个好的方法来浏览一个脚本并对我们看到的所有局部变量进行求和?
例如:
def foo():
#Two local variables
a=1
b=2
def bar():
#Two more local variables
a=10
for i in range(a):
a+=1
b=sum(i for i in range(10))
num_encountered_locals = 4发布于 2017-05-18 15:34:48
查看新的Python3.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()])
>>> sum([not callable(globals()[i]) for i in globals()]) - globs - 1 # -1 for globs
0现在:
>>> 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的每一个调用都会给出在这一点上定义的变量数(这是在全局范围内,您可以使用类似的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>标记中)
https://stackoverflow.com/questions/44051597
复制相似问题