[Python] 动态函数调用(通过函数名)

python

2018-04-09 update

利用python中的内置函数 eval() ,函数说明:

def eval(*args, **kwargs): # real signature unknown

"""

Evaluate the given source in the context of globals and locals.

The source may be a string representing a Python expression

or a code object as returned by compile().

The globals must be a dictionary and locals can be any mapping,

defaulting to the current globals and locals.

If only globals is given, locals defaults to it.

"""

pass

样例1:

def function2(name, age):

print("name: %s, age: %s" % (name, age))

if __name__ == '__main__':

eval("function2")("Alice", 11)

# 或者:

args = ["Alice", 11]

kwargs = {}

eval("function2")(*args, **kwargs)

"""

输出结果都是:

name: Alice, age: 11

"""

样例2:

class Test(object):

states = [u"大于等于零", u"大于等于二"]

state2function = {u"大于等于零": "check_gt0", u"大于等于二": "check_gt2"}

@staticmethod

def check_gt0(x):

return x >= 0

@staticmethod

def check_gt2(x):

return x >= 2

def predict(self, x):

for state in Test.states:

check_ans = eval("Test." + Test.state2function[state])(x) # 调用Test类中的方法

print(state, Test.state2function[state], x, check_ans)

if __name__ == '__main__':

test = Test()

test.predict(x=-1)

test.predict(x=1)

test.predict(x=2)

"""

输出:

大于等于零 check_gt0 -1 False

大于等于二 check_gt2 -1 False

大于等于零 check_gt0 1 True

大于等于二 check_gt2 1 False

大于等于零 check_gt0 2 True

大于等于二 check_gt2 2 True

"""

*************************************************************************************************************************************************************

2017-08-09 

由字符串函数名得到对应的函数

把函数作为参数的用法比较直观:

def func(a, b):

return a + b

def test(f, a, b):

print f(a, b)

test(func, 3, 5)

但有些情况下,‘要传递哪个函数’这个问题事先还不确定,例如函数名与某变量有关。可以利用 func = globals().get(func_name) 来得到函数:

def func_year(s):

print 'func_year:', s

def func_month(s):

print 'func_month:', s

strs = ['year', 'month']

for s in strs:

globals().get('func_%s' % s)(s)

"""

输出:

func_year: year

func_month: month

"""

参考:https://blog.csdn.net/lifestxx/article/details/78757345

以上是 [Python] 动态函数调用(通过函数名) 的全部内容, 来源链接: utcz.com/z/389375.html

回到顶部