zoukankan      html  css  js  c++  java
  • 【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')
    

    推荐使用

  • 相关阅读:
    Java程序设计11——异常处理
    Hive安装及配置
    zookeeper集群安装(转)
    Linux网络服务管理命令
    Linux网络配置常用命令
    IP地址及子网掩码计算
    linux ftp、sftp、telnet服务开通、更改Orale最大连接数
    SQL多表连接
    用css伪类实现提示框效果
    关于DOM操作的性能优化
  • 原文地址:https://www.cnblogs.com/guanhuohuo/p/12533578.html
Copyright © 2011-2022 走看看