我想编写一个获取范围内所有变量的函数,然后确定 每个变量的类型。 我知道vars(),dir()和类似的东西,但这些函数返回一个字符串列表。 我怎样才能真正得到这些类型? 我想做那样的事情:
#this is just pseudo code
for item in <items in scope>:
if isinstance(item, someclass):
del <item which belongs to someclass>
提前谢谢,
盎司
答案 0 :(得分:4)
要获取对象的类型,可以使用
type(obj)
要获取每个局部变量的类型,可以使用
for obj in locals().values():
print type(obj)
(在Python 3.x中,您应该使用list(locals().values())
而不是locals().values()
,因为您在循环期间修改了locals()
。)
答案 1 :(得分:4)
您可能正在寻找locals
,它会返回带有本地变量名称及其值的字典:
for name, value in locals().items():
if isinstance(value, someclass):
do something
好的,我正在编辑这个答案,因为它是我想要的最接近的: 我想擦除所有numpy数组。我发现numpy没有“全部清除”la octave \ matlab,而且ipython的%reset有点太多了,这很烦人。
所以,这里是: 在[24]中:anp = np.r_ [1:10]
In [25]: np.who()
Name Shape Bytes Type
===========================================================
anp 9 36 int32
Upper bound on total bytes = 36
In [26]: for name, value in locals().items():
....: if isinstance(value, np.ndarray):
....: print name
....: print value
....: del globals()[name]
....:
anp
[1 2 3 4 5 6 7 8 9]
In [27]: np.who()
Upper bound on total bytes = 0
感谢大家,为了意志和努力!
答案 2 :(得分:0)
如果您想要所有变量,您需要访问全局和局部变量:
for (name, value) in globals().items()+locals().items():
print "Variable", name, "is of type", type(value)
这使您可以访问Python解释器自动定义的全局变量(如__name__
)。
如果您只需要收集类型而不需要名称,则可以.values()
代替.items()
。
答案 3 :(得分:0)
您可以使用eval
-
for item in locals(): # although locals() is a dict, you can iterate through its keys.
obj = eval(item)
print type(obj) # this prints the type of the object
if isinstance(obj, someclass):
# do something