python 通过函数名判断函数是否存在及调用

判断函数是否存在可以参考: https://blog.csdn.net/yiifaa/article/details/78046331

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')

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值