python:利用eval来执行字符串代码

接口

eval(str [,globals [,locals ]])函数将字符串str当成有效Python表达式来求值,并返回计算结果

之前看到eval这个函数时一直想不到需要用的地方,今天正在研究python属性相关问题时正好用上了,直接上代码

def func():
    f =1
    
if __name__ == '__main__':
    #打印func的内建属性
    print dir(func)

输出如下:

['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']

天啦噜,一个简单的函数就有这么多内建属性,于是我想调用print func.call来看看这些属性究竟是什么鬼
但是这么多属性,不可能一个一个打印的,于是我想遍历这个列表,然后不断执行func.attr,但是遍历出来的attr是字符串啊,eval出场的时候到了

    for attr in dir(func):
        print attr, ":", eval("func."+attr)

输出如下,可见python私下还是做了很多不知道的东西,有时间好好研究下这些属性

__call__ : 
__class__ : 
__closure__ : None
__code__ :  None
__delattr__ : 
__dict__ : {}
__doc__ : None
__format__ : 
__get__ : 
__getattribute__ : 
__globals__ : {'son': , 'uic': , 'main': , 'func': , 'QtGui': , 'parent': , '__builtins__': , '__file__': 'C:\\Users\\lht\\Desktop\\\xb1\xcf\xc9\xe8\\test.py', 'Des': , 'qtCreatorFile': 'first.ui', '__package__': None, 'sys': , 'Ui_MainWindow': , 'MyApp': , '__name__': '__main__', 'QtBaseClass': , 'QtCore': , '__doc__': None, 'attr': '__globals__'}
__hash__ : 
__init__ : 
__module__ : __main__
__name__ : func
__new__ : 
__reduce__ : 
__reduce_ex__ : 
__repr__ : 
__setattr__ : 
__sizeof__ : 
__str__ : 
__subclasshook__ : 
func_closure : None
func_code :  None
func_dict : {}
func_doc : None
func_globals : {'son': , 'uic': , 'main': , 'func': , 'QtGui': , 'parent': , '__builtins__': , '__file__': 'C:\\Users\\lht\\Desktop\\\xb1\xcf\xc9\xe8\\test.py', 'Des': , 'qtCreatorFile': 'first.ui', '__package__': None, 'sys': , 'Ui_MainWindow': , 'MyApp': , '__name__': '__main__', 'QtBaseClass': , 'QtCore': , '__doc__': None, 'attr': 'func_globals'}
func_name : func

你可能感兴趣的:(python:利用eval来执行字符串代码)