我试图将两个函数作为参数传递,但是函数str.upper
和str.strip
出错。我不知道自己在做什么错?
def normalize_text(func1, func2):
return func2(func1)
def my_strip(s):
return str.strip(s)
def my_upper(s):
return str.upper(s)
def test():
if(normalize_text(my_strip, my_upper)(' foo ') == 'FOO'):
print('Success')
test()
正在运行类似python main.py
...然后我遇到一个错误:
TypeError: descriptor 'upper' requires a 'str' object but received a 'function'
答案 0 :(得分:4)
您的功能应遵循以下原则:
def normalize_text(func1, func2):
def func3(s):
return func2(func1(s))
return func3
func1
和func2
都以字符串作为输入并返回一个字符串。因此,当链接在一起时,一个应该处理另一个的输出,而不是函数本身。
答案 1 :(得分:1)
您正在将func2
传递给func1
,但是func1
期望将字符串作为其参数,因此您需要传递对某些事物调用func2
的结果。 / p>
normalize_text
可以返回一个lambda,该lambda调用输入参数上的两个函数。
def normalize_text(func1, func2):
return lambda s: func1(func2(s))