找到范围python中所有变量的类型

时间:2011-06-27 15:19:33

标签: python types scope

我想编写一个获取范围内所有变量的函数,然后确定 每个变量的类型。 我知道vars(),dir()和类似的东西,但这些函数返回一个字符串列表。 我怎样才能真正得到这些类型? 我想做那样的事情:

 #this is just pseudo code
 for item in <items in scope>:
     if isinstance(item, someclass):
        del <item which belongs to someclass>
提前谢谢, 盎司

4 个答案:

答案 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