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

  • 相关阅读:
    android 75 新闻列表页面
    android 74 下载文本
    android 73 下载图片
    android 72 确定取消对话框,单选对话框,多选对话框
    android 71 ArrayAdapter和SimpleAdapter
    android 70 使用ListView把数据显示至屏幕
    maven如何将本地jar安装到本地仓库
    Centos6.7搭建ISCSI存储服务器
    解决maven打包编译出现File encoding has not been set问题
    MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码)
  • 原文地址:https://www.cnblogs.com/bymo/p/7327732.html
Copyright © 2011-2022 走看看