摘要:如果我們想要字符串變成可調(diào)用的對象呢或是想通過變量調(diào)用模塊的屬性和類的屬性呢以下有三種方法可以實(shí)現(xiàn)。通常用來執(zhí)行一個(gè)字符串表達(dá)式,并返回表達(dá)式的值。在這里它將字符串轉(zhuǎn)換成對應(yīng)的函數(shù)。
先看一個(gè)例子:
>>> 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í)行列表中的函數(shù),但是從列表中獲得的函數(shù)名是字符串,所以會提示類型錯(cuò)誤,字符串對象是不可以調(diào)用的。如果我們想要字符串變成可調(diào)用的對象呢?或是想通過變量調(diào)用模塊的屬性和類的屬性呢?以下有三種方法可以實(shí)現(xiàn)。
eval()>>> for func in func_list: eval(func)() foo bar
eval() 通常用來執(zhí)行一個(gè)字符串表達(dá)式,并返回表達(dá)式的值。在這里它將字符串轉(zhuǎn)換成對應(yīng)的函數(shù)。eval() 功能強(qiáng)大但是比較危險(xiǎn)(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的兩個(gè)內(nèi)置函數(shù),通過它們可以一字典的方式訪問局部和全局變量。
getattr()getattr() 是 python 的內(nèi)建函數(shù),getattr(object,name) 就相當(dāng)于 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?
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/40696.html
摘要:在定義函數(shù)時(shí)給定的名稱稱作形參,在調(diào)用函數(shù)時(shí)你所提供給函數(shù)的值稱作實(shí)參。調(diào)用函數(shù)要調(diào)用一個(gè)函數(shù),需要知道函數(shù)的名稱和參數(shù)。默認(rèn)參數(shù)值可以有效幫助解決這一情況。是默認(rèn)參數(shù)定義默認(rèn)參數(shù)要牢記一點(diǎn)默認(rèn)參數(shù)必須指向不變對象。 關(guān)于數(shù)據(jù)科學(xué)在做什么,我們已經(jīng)在前兩篇文章中進(jìn)行了總結(jié),即專題概述和描述性統(tǒng)計(jì)分析。要進(jìn)行數(shù)據(jù)科學(xué)的探索,需要一個(gè)好工具,就是Python。從本篇開始,將總結(jié)學(xué)習(xí)Pyth...
摘要:繼續(xù)講述更多的的內(nèi)置函數(shù)。傳遞以切換緩沖關(guān)閉僅允許在二進(jìn)制模式下,選擇行緩沖僅在文本模式下可用,并且的整數(shù)以指示固定大小的塊緩沖區(qū)的大小以字節(jié)為單位。啟動(dòng)內(nèi)置的幫助系統(tǒng)此函數(shù)主要在交互式中使用。 繼續(xù)講述更多的Python的內(nèi)置函數(shù)。 showImg(https://segmentfault.com/img/remote/1460000019193976); IO操作 input([p...
摘要:為我們提供了許多內(nèi)置函數(shù),例如并提供了創(chuàng)建用戶定義函數(shù)的能力。會將該變量視為函數(shù)級作用域中的局部變量?;氐侥夸浿泻瘮?shù)的用途是什么是中的內(nèi)置函數(shù)之一。請注意,這種類型的參數(shù)語法不允許將命名參數(shù)傳遞給函數(shù)。函數(shù)接受一個(gè)稱為的可選參數(shù)。 ...
摘要:本人很少寫代碼一般都是用的去年時(shí)用寫過一些收集系統(tǒng)信息的工具當(dāng)時(shí)是邊看手冊邊寫的如今又要用來寫一個(gè)生成的工具就又需要查看手冊了至于為什么不用寫那是因?yàn)榈膸觳患嫒萦乐性谶@里不得不說雖然很火但是一些庫還是不如多不如兼容性好為了避免以后再出這種事 Python3 Study Notes 本人很少寫 python 代碼, 一般都是用 go 的, 去年時(shí)用 python 寫過一些收集系統(tǒng)信息的工...
摘要:返回的信息特定于當(dāng)前線程以及當(dāng)前堆棧幀。出于某些原因,這個(gè)值可能無法計(jì)算,將返回返回安卓版本的構(gòu)建時(shí)間,以整數(shù)表示。僅適用于安卓平臺返回解釋器的檢查間隔??刹僮鞔藢傩詫?shí)現(xiàn)強(qiáng)制重新加載模塊等。 sys模塊提供對由解釋器使用或維護(hù)的某些變量、與解釋器交互的函數(shù)的訪問接口。 sys.abiflags 在使用標(biāo)準(zhǔn)configure腳本構(gòu)建python的POSIX系統(tǒng)上,該屬性包含了PEP 31...
閱讀 3330·2021-11-23 09:51
閱讀 2459·2021-11-09 09:46
閱讀 1493·2019-08-30 15:54
閱讀 3140·2019-08-30 14:22
閱讀 2919·2019-08-29 12:40
閱讀 1644·2019-08-26 10:33
閱讀 1789·2019-08-23 17:09
閱讀 1565·2019-08-23 16:11