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,tuple或str,或).
无论是删除了*(,使您的工作功能只是单一的参数),或者使用*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)
在这里,我重新命名z为args更好地反映其目的.
| 归档时间: |
|
| 查看次数: |
6135 次 |
| 最近记录: |