如果你想这样做,就像你写它,你需要这样做:
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