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