*之后的sqrt()参数必须是一个序列

0 python parameters arguments function typeerror

首先,我是python的新手,我实际上是在搜索我的问题,但实例很难理解.

这是我的作业; 我需要一个函数,它接受两个函数作为参数,并返回两个函数的结果是否相同?基本上,它将给出TRUE为FALSE.

为此,我写道:

def f(x,y,z):
    k=x(*z)
    l=y(*z)
    return k == l
Run Code Online (Sandbox Code Playgroud)

我为单个函数编写的previos代码正在工作,但当我修改它为上面的两个函数时,它给出如下错误:

import math
>>> f(math.sqrt,math.cos,5)

Traceback (most recent call last):
  File "<pyshell#56>", line 1, in <module>
    f(math.sqrt,math.cos,5)
  File "D:/Users/karabulut-ug/Desktop/yalanmakinesi.py", line 2, in f
    k=x(*z)
TypeError: sqrt() argument after * must be a sequence
>>> 
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚,因为错误提供功能通常不需要序列.所以我不认为这是有道理的:)任何帮助表示赞赏..谢谢:)

Mar*_*ers 11

z只是一个数字,但*参数扩展语法要求您传入一个序列(例如list,tuplestr,或).

无论是删除*(,使您的工作功能只是单一的参数),或者使用*z在函数签名做出z的0个或多个参数捕获一个元组:

def f(x, y, z):
    k = x(z)
    l = y(z)
    return k == l
Run Code Online (Sandbox Code Playgroud)

要么

def f(x, y, *z):
    k = x(*z)
    l = y(*z)
    return k == l
Run Code Online (Sandbox Code Playgroud)

后者现在适用于具有多个参数的函数:

f(math.pow, math.log, 10, 10)
Run Code Online (Sandbox Code Playgroud)

如果您**kw在签名中添加了参数,那么也可以处理关键字参数:

def f(x, y, *args, **kwargs):
    k = x(*args, **kwargs)
    l = y(*args, **kwargs)
    return k == l
Run Code Online (Sandbox Code Playgroud)

在这里,我重新命名zargs更好地反映其目的.