1. 根据“__call__”属性判断

有时候用python就有这么一种感悟,各种钩子函数就是通过内置的“__”属性实现,python学得好不好,就是对“__”属性理解得透彻不透彻。

python函数在调用时,一定会首先调用其相关“__call__”函数(没有空格),请参见python总结(四):类装饰器与方法的动态添加中的用法。

add = lambda a, b: a + b
#   判断成功
if(hasattr(add, '__call__')):
        print add(1,2)

2. 利用callable判断

这是一个据传快要废弃的方法,但是在Python 2中依旧很好用,如下:

#   判断成功
if(callable(add)):
        print add(2, 2)

3. 利用isfunction进行判断

Python的inspect模块包含了大量的与反射、元数据相关的工具函数,isfunction就是其中一种,使用方法如下:

from inspect import isfunction
#   判断成功
if(isfunction(add)):
    print add(5, 5)

-------------------------------我是分割线----------------------------

现在有多个命名类似的函数,我重新组装函数名(字符串)要判断是否存在及其调用,要用到了python的eval函数

def fun():
print('hello')
a = 'fun'
# 判断函数是否存在
print(callable(eval(a),'__call__'))
> True
# 调用函数
eval(a)()
> hello

应用示例:

def fun1(msg):
print(1,msg.get('info'))
def fun2(msg):
print(2,msg.get('info'))
def fun3(msg):
print(3,msg.get('info'))
msg = {'type':1,'info':'111'}
fun_name = 'fun'+str(msg.get('type'))
if callable(eval(fun_name),'__call__'):
eval(fun_name)(msg)
else:
raise Exception('not found function')

这样就可以根据消息类型调用不同的处理函数


上一篇:45个实用的前端开发工具汇总

下一篇:PHP 中调用 Python 并获取运行结果

评论列表
发表评论
称呼
邮箱
网址
验证码(*)
热评文章
相关阅读