资讯专栏INFORMATION COLUMN

Python 通过字符串调用函数或方法

n7then / 1364人阅读

摘要:如果我们想要字符串变成可调用的对象呢或是想通过变量调用模块的属性和类的属性呢以下有三种方法可以实现。通常用来执行一个字符串表达式,并返回表达式的值。在这里它将字符串转换成对应的函数。

先看一个例子:

>>> 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?

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40696.html

相关文章

  • 【数据科学系统学习】Python # 编程基础[一]

    摘要:在定义函数时给定的名称称作形参,在调用函数时你所提供给函数的值称作实参。调用函数要调用一个函数,需要知道函数的名称和参数。默认参数值可以有效帮助解决这一情况。是默认参数定义默认参数要牢记一点默认参数必须指向不变对象。 关于数据科学在做什么,我们已经在前两篇文章中进行了总结,即专题概述和描述性统计分析。要进行数据科学的探索,需要一个好工具,就是Python。从本篇开始,将总结学习Pyth...

    luckyyulin 评论0 收藏0
  • python基础教程:内置函数(二)

    摘要:继续讲述更多的的内置函数。传递以切换缓冲关闭仅允许在二进制模式下,选择行缓冲仅在文本模式下可用,并且的整数以指示固定大小的块缓冲区的大小以字节为单位。启动内置的帮助系统此函数主要在交互式中使用。 继续讲述更多的Python的内置函数。 showImg(https://segmentfault.com/img/remote/1460000019193976); IO操作 input([p...

    xiaodao 评论0 收藏0
  • 100 个基本 Python 面试问题第二部分(21-40)

    摘要:为我们提供了许多内置函数,例如并提供了创建用户定义函数的能力。会将该变量视为函数级作用域中的局部变量。回到目录中函数的用途是什么是中的内置函数之一。请注意,这种类型的参数语法不允许将命名参数传递给函数。函数接受一个称为的可选参数。 ...

    2450184176 评论0 收藏0
  • python3 学习笔记

    摘要:本人很少写代码一般都是用的去年时用写过一些收集系统信息的工具当时是边看手册边写的如今又要用来写一个生成的工具就又需要查看手册了至于为什么不用写那是因为的库不兼容永中在这里不得不说虽然很火但是一些库还是不如多不如兼容性好为了避免以后再出这种事 Python3 Study Notes 本人很少写 python 代码, 一般都是用 go 的, 去年时用 python 写过一些收集系统信息的工...

    tuomao 评论0 收藏0
  • python模块之sys

    摘要:返回的信息特定于当前线程以及当前堆栈帧。出于某些原因,这个值可能无法计算,将返回返回安卓版本的构建时间,以整数表示。仅适用于安卓平台返回解释器的检查间隔。可操作此属性实现强制重新加载模块等。 sys模块提供对由解释器使用或维护的某些变量、与解释器交互的函数的访问接口。 sys.abiflags 在使用标准configure脚本构建python的POSIX系统上,该属性包含了PEP 31...

    csRyan 评论0 收藏0

发表评论

0条评论

n7then

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<