类型错误:描述符"upper"需要一个"str"对象,但收到一个"函数"(初学者)



我正在尝试将两个函数作为参数传递,但是函数str.upperstr.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'

你的函数应该按照以下思路工作:

def normalize_text(func1, func2):
def func3(s):
return func2(func1(s))
return func3

func1func2都将字符串作为输入并返回字符串。因此,当链接在一起时,一个应该处理另一个的输出,而不是函数本身。

你正在将func2传递给func1,但func1需要一个字符串作为它的参数,所以你需要传递调用func2的结果。

normalize_text可以返回一个 lambda,该 lambda 在输入参数上调用这两个函数。

def normalize_text(func1, func2):
return lambda s: func1(func2(s))

最新更新