如果你想這樣做,就像你寫它,你需要這樣做:
def transform(s,f):
return getattr(type(s), f)(s)
for i in transform('abCdeFg','upper'):
print(i,end='')
打印:
ABCDEFG
正如其他人所說,這是更直接的:
print('abCdeFg'.upper())
您也不應該使用Python內置函數作爲名稱。 (即,避免調用GENEX all
,因爲你將覆蓋內置函數all)
隨着GETATTR你也可以返回類型的默認不具有給定的方法:
>>> def transform(s,f):
... return getattr(type(s), f, lambda s: 'no bueno')(s)
>>> transform(1,'upper')
'no bueno'
或者使用try /除外:
>>> def transform(s,f):
... try:
... return getattr(type(s), f)(s)
... except AttributeError as e:
... return e
...
>>> transform(1,'upper')
AttributeError("type object 'int' has no attribute 'upper'",)
您還可以使用地圖加入:
>>> ''.join(map(lambda c: str.upper(c), 'abCdeFg'))
'ABCDEFG'
或加入理解:
>>> ''.join(c.upper() for c in 'abCdeFg')
'ABCDEFG'
當你說「我得到一個錯誤」,你必須告訴我們錯誤是什麼。否則,我們只能猜測或嘗試自行解決。 – Gabe 2013-05-01 03:55:35
請勿將'all'用作變量名稱。您將覆蓋內置的[all](http://docs.python.org/3.3/library/functions.html#all) – dawg 2013-05-01 04:08:21