手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

Python 用字符串名调用方法

[日期:2020-01-27] 来源:Linux社区  作者:wgPython [字体: ]

有时候,一些特殊情况,需要用到用字符串的方法名去调用方法。现在做个笔记避免以后一直搜。

如何使用字符串调用函数/方法?

有多种技巧可供选择。

最好的做法是使用一个将字符串映射到函数的字典。 这一技巧的主要优势在于字符串不必与函数名称一致。 这也是用于模拟其他语言中 case 结构的主要技巧:

def a():
    pass

def b():
    pass

dispatch = {'go': a, 'stop': b}  # Note lack of parens for funcs

dispatch[get_input()]()  # Note trailing parens to call function

使用内置函数 getattr()

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

请注意 getattr() 可用于任何对象,包括类、类实例、模块等等。

在标准库中多次使用了这个技巧,例如:

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

    def do_bar(self):
        ...

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

使用 locals() 或 eval() 来解析出函数名:

def myFunc():
    print("hello")

fname = "myFunc"
f = locals()[fname]
f()

f = eval(fname)
f()

注意:使用 eval() 速度慢而且危险。 如果你不能绝对掌控字符串的内容,别人将能传入可被解析为任意函数直接执行的字符串。

更多Python相关信息见Python 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=17

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址https://www.linuxidc.com/Linux/2020-01/162141.htm

linux
相关资讯       Python字符串 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款