• 【python】根据不同参数调用不同的函数


    有时候需要根据不同的情况调用不同的方法实现功能逻辑,有什么优雅的方式可以实现么?
    首先有一个最原始的 if ... else 方式

    parm = 'A'
    def A():
        print("A")
    
    def B():
        print("B")
        
    if parm == 'A':
        A()
    elif parm == 'B':
        B()
    

    这样的方式可以实现功能逻辑,但是略显low,而且后续的扩展不大好

    那是否有更好的方式呢?

    func_dict

    func_dict.get(x, func_None)()中方法是从字典中取出值对应的函数对象,然后后面加上()是执行该对象的__call__方法。因为python中函数就是实现了__call__方法的对象

    def funcA():
        pass
     
    def funcB():
        pass
     
    def func_None():
        print "cannot find func"
     
    func_dict = {"a": funcA, "b": funcB}
     
    def func(x):
        return func_dict.get(x, func_None)()
    

    exec

    exec内置函数是继eval之后的一个很有用的函数,可以执行python的代码,传入python的代码字符串就行

    parm = 'A'
    
    def A(m):
        print("A+", m)
    
    def B(m):
        print("B+", m)
       
    eval("{0}".format('A'))('xx')
    

    getattr()

    用于返回一个对象属性值
    语法:
    getattr(object, name[, default])
    参数:
    object – 对象。
    name – 字符串,对象属性。
    default – 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError
    返回值:
    返回对象属性值

    parm = 'A'
    class C(object):
        def A(self,m):
            print("A+",m)
    
        def B(self,m):
            print("B+",m)
    
    getattr(C(), parm)('p')
    

    推荐使用

  • 相关阅读:
    QuickFlash
    第五课:类的封装性 M
    第六课:构造方法、匿名对象 M
    第四课:面向对象(基础) M
    第八课:引用传递 M
    第七课:String类 M
    第二课:数组 M
    第三课:方法 M
    ASP .Net的应用程序域(The Application Domain)
    js 解数独程序
  • 原文地址:https://www.cnblogs.com/guanhuohuo/p/12533578.html
Copyright © 2020-2023  润新知