Python中用字符串调用函数或措施亲自过问代码,python示例代码

pyMethod类下定义了多少个方法,getattr(pyMethod(),'out%s'%str)()   传入的不二等秘书诀名分歧,调用差异的不二法门。些处方法名字为字符串。

Python中用字符串调用函数或方式以身作则代码,python示例代码

前言

本文重要给我们介绍了有关Python用字符串调用函数或方法的相干内容,分享出去供我们参谋学习,下边来一头造访详细的牵线:

先看三个例证:

>>> def foo():
    print "foo"

>>> def bar():
    print "bar"

>>> func_list = ["foo","bar"]
>>> for func in func_list:
    func()
TypeError: 'str' object is not callable

笔者们期望遍历施行列表中的函数,可是从列表中获取的函数名是字符串,所以会提示类型错误,字符串对象是不得以调用的。假如大家想要字符串产生可调用的对象啊?或是想经过变量调用模块的属性和类的性能呢?

以下有两种办法能够完结。

eval()

>>> for func in func_list:
    eval(func)()
foo
bar

eval() 常常用来试行三个字符串表明式,并回到表明式的值。在那处它将字符串调换来对应的函数。eval() 效率强大不过对比危殆(eval is evil),不提出采纳。

locals()和globals()

>>> for func in func_list:
    locals()[func]()
foo
bar

>>> for func in func_list:
    globals()[func]()
foo
bar

locals() 和 globals() 是python的八个放置函数,通过它们得以一字典的方法访谈片段和全局变量。

getattr()

getattr() 是 python 的内建函数,getattr(object,name) 就一定于 object.name,可是这里 name 可以为变量。

返回 foo 模块的 bar 方法

>>> import foo
>>> getattr(foo, 'bar')() 

归来 Foo 类的习性

>>> class Foo:
  def do_foo(self):
    ...

  def do_bar(self):
    ...

>>> f = getattr(foo_instance, 'do_' + opname)
>>> f()

总结

上述正是那篇小说的全体内容了,希望本文的内容对大家的求学大概办事能推动一定的帮扶,若是有问号我们能够留言交换,多谢大家对帮客之家的支撑。

参考

Calling a function of a module from a string with the function's name in Python

How do I use strings to call functions/methods?

前言 本文首要给我们介绍了有关Python用字符串调用函数或艺术的有关内容,分享...

反射

# 1.创建index.py主程序
# 2.创建commoms模块提供函数
# 3.引入commons模块调用模块中的函数

# commoms.py
def f1():
    print('F1')
    return 'F1'

# index.py
import commons
if __name__ == '__main__':
    ret = commons.f1()
    print(ret) # F1
# index.py
if __name__ == '__main__':
    module = input('请输入模块名:')
    mod = __import__(module)
    # ret = mod.f1() # 正常调用
    # print(ret) # 正常输出
    attr = input('请输入方法名:')
    meth = getattr(mod,attr)
    ret = meth()
    print(ret)

Linux and python学习交换3群新开,接待参加,一同学习.qq 3群:563227894

面向对象

原型:getattr(对象,方法名)

依靠反射模拟web框架路由系统

# 1.创建主程序index.py
# 2.创建功能模块
# 3.截取url,获取里面的地址参数执行不同的方法

# url = input("请输入url:")
url = 'www.yuhhcompany.com/account/login'
regex = 'www.yuhhcompany.com'
ret = re.match(regex, url)
if ret != None:
    # 匹配成功
    host, module, method = url.split('/')
    mod = __import__(module, fromlist=True)
    if hasattr(mod, method):
        ret = getattr(mod, method)()