前言
本文主要給大家介紹了關于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)()foobar
eval() 通常用來執行一個字符串表達式,并返回表達式的值。在這里它將字符串轉換成對應的函數。eval() 功能強大但是比較危險(eval is evil),不建議使用。
locals()和globals()
>>> for func in func_list: locals()[func]()foobar>>> for func in func_list: globals()[func]()foobar
locals() 和 globals() 是python/266340.html">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()
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。
參考
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?
新聞熱點
疑難解答