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
我們希望遍歷執(zhí)行列表中的函數,但是從列表中獲得的函數名是字符串,所以會提示類型錯誤,字符串對象是不可以調用的。如果我們想要字符串變成可調用的對象呢?或是想通過變量調用模塊的屬性和類的屬性呢?
以下有三種方法可以實現(xiàn)。
eval()
>>> for func in func_list: eval(func)() foo bar
eval() 通常用來執(zhí)行一個字符串表達式,并返回表達式的值。在這里它將字符串轉換成對應的函數。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