导航

 

所谓动态函数名,就是使用时完全不知道是叫什么名字,可以由用户输入那种。

一般人习惯性会想到eval或exec, 但是众所周知,这样的写法不安全而且容易引起问题,而且不pythonic。而且使用时必须把函数定义写在动态函数名调用之前。

def _phyCPU():
    print "ok"
values = ["_phyCPU"]#, "_proCPU", "_cpuModel"]
for value in values:
    eval(value)()  

所以得采用更好的方式,对于在类里的动态函数名,可以使用getattr的方式。

class A:   
    def __init__(self):   
        self.name = 'zhangjing'  
    #self.age='24'
    def method(self):   
        print"method print"  
  
Instance = A()   
print getattr(Instance , 'name, 'not find') #如果Instance 对象中有属性name则打印self.name的值,否则打印'not find'

但是有时候我们写的函数不在类里,这种情况下需要调用动态函数名,可以使用locals()

def foo():
    print "ok"
locals()["foo"]()

 

posted on 2016-05-11 11:25  slqt  阅读(1317)  评论(0编辑  收藏  举报