python 使用函式名的字串呼叫函式

2021-09-29 14:21:30 字數 1764 閱讀 5027

>>

>

deffoo()

:print

"foo"

>>

>

defbar()

:print

"bar"

>>

> func_list =

["foo"

,"bar"

]>>

>

for func in func_list:

func(

)typeerror:

'str'

object

isnot

callable

我們希望遍歷執行列表中的函式,但是從列表中獲得的函式名是字串,所以會提示型別錯誤,字串物件是不可以呼叫的。如果我們想要字串變成可呼叫的物件呢?或是想通過變數呼叫模組的屬性和類的屬性呢?以下有三種方法可以實現。

>>

>

for func in func_list:

eval

(func)()

foobar

eval() 通常用來執行乙個字串表示式,並返回表示式的值。在這裡它將字串轉換成對應的函式。eval() 功能強大但是比較危險(eval is evil)(原因目前未知???),不建議使用。

>>

>

for func in func_list:

locals()

[func]()

foobar

>>

>

for func in func_list:

globals()

[func]()

foobar

locals() 和 globals() 是python的兩個內建函式,通過它們可以以字典的方式訪問區域性和全域性變數。

getattr() 是 python 的內建函式,getattr(object,name) 就相當於 object.name,但是這裡 name 可以為變數。

返回 foo 模組的 bar 方法

>>

>

import foo

>>

>

getattr

(foo,

'bar')(

)

返回 foo 類的屬性,ex:

>>

>

class

foo:

defdo_foo

(self):.

..defdo_bar

(self):.

..>>

> f =

getattr

(foo_instance,

'do_'

+ opname)

>>

> f(

)

>>

>

class

foo:

defdo_foo

(self)

:print

1def

do_bar

(self)

:print

2>>

> f = foo(

)>>

>

from operator import methodcaller

>>

> methodcaller(

'do_foo'

)(f)

python字串函式

對於月份不足兩位補零操作如下 stryearmonth str year str month zfill 2 不足兩位補充0 生成字串變數 strcpy sstr1,sstr2 sstr1 strcpy sstr2 sstr1 sstr1 strcpy2 print sstr2 比較字串 strcm...

python 字串函式

str.count sub 返回 sub在str中出現的次數 str.find sub 返回 從左開始,查詢sub在str中第一次出現的位置。如果str中不包含sub,返回 1 str.index sub 返回 從左開始,查詢sub在str中第一次出現的位置。如果str中不包含sub,舉出錯誤 st...

Python 字串函式

注意cmp函式的輸出結果和c語言的strcmp是一樣的。還可以用 aaa bbb 來比較字串。擷取字串 特別注意 下標從0開始 str 0 3 不包含下標為3的字元。str 0123456789 print str 0 3 擷取第一位到第三位的字元 print str 擷取字串的全部字元 print...