書いたとおりにこれを行いたい場合は、次のようにする必要があります。
def transform(s,f):
return getattr(type(s), f)(s)
for i in transform('abCdeFg','upper'):
print(i,end='')
版画:
ABCDEFG
他の人が言ったように、これはより直接的です:
print('abCdeFg'.upper())
また、Python ビルトインを名前として使用しないでください。(つまり、組み込み関数allall
を上書きするため、ジェネクスの呼び出しは避けてください。)
getattr を使用すると、指定されたメソッドを持たない型のデフォルトを返すこともできます。
>>> def transform(s,f):
... return getattr(type(s), f, lambda s: 'no bueno')(s)
>>> transform(1,'upper')
'no bueno'
または、try / except を使用します。
>>> 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'