菜单

Python中用字符串调用函数或措施言传身教代码,python示例代码

2019年4月10日 - 金沙编程资讯

pyMethod类下定义了多少个格局,getattr(pyMethod(),’out%s’%str)()  
传入的诀窍名不相同,调用不一致的秘诀。些处方法名叫字符串。

Python中用字符串调用函数或格局言传身教代码,python示例代码

前言

正文首要给我们介绍了有关Python用字符串调用函数或方法的相关内容,分享出去供大家参考学习,下边来一同探访详细的介绍:

先看1个例证:

>>> 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()
经常用来推行1个字符串表达式,并赶回表明式的值。在此间它将字符串转换来对应的函数。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)

题材聚焦:

 

依照反射模拟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)()

熟识getattr的应有知道,getattr(a, ‘b’)的效益就和a.b是一律的

那就是说这么些内建函数有怎样效劳吧,最便利的可相信是选取它来落到实处工厂方法(Factory
Method)情势

其它,在回调函数里也平日应用那么些函数,对回调精晓不深,这里不再举例

#coding=utf-8

class pyMethod(object):
    def outstr(self):
        print('this is string')

    def outint(self):
        print('this is number')

    def outdate(self):
        print('this is date')


if __name__=="__main__":
    str = 'int'
    getattr(pyMethod(),'out%s'%str)()     
    str = 'str'
    getattr(pyMethod(),'out%s'%str)()
    str = 'date'
    getattr(pyMethod(),'out%s'%str)()

面向对象

参考资料:

不前进,不倒退,甘休的景色是不曾的.

Python找那么些的getattr()函数详解

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

熟谙getattr的应有掌握,getattr(a,
‘b’)的效劳就和a.b是千篇一律的
那么那几个内建函数有哪些效益呢,最有利于的实地是使用它来实现工厂…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图