这样定义函数为什么是错的
def abc(x, y):z = x * y
return abc()
>>> abc(5, 6)
Traceback (most recent call last):
File "<pyshell#251>", line 1, in <module>
abc(5, 6)
File "<pyshell#250>", line 3, in abc
return abc()
TypeError: abc() missing 2 required positional arguments: 'x' and 'y' 这个函数定义是错误的,因为在函数的返回语句中,它调用了自身,但是没有传入任何参数,导致程序抛出了一个TypeError异常。正确的方式是在函数调用时传入参数,例如:abc(5, 6)。这样,函数就可以正确地执行并返回结果了。 def abc(x, y):
z = x * y
return abc() 难道这里就不需要传参吗
>>> abc(5, 6)你只知道这里传参 def abc(x, y):
z = x * y
return abc(A,B) 即便这里你传了参,那么就涉及到递归函数了,就需要设置递归终止条件,否则就会死循环的
>>> abc(5, 6) 本帖最后由 lzb1001 于 2023-5-18 14:50 编辑
isdkz 发表于 2023-5-18 14:11
这个函数定义是错误的,因为在函数的返回语句中,它调用了自身,但是没有传入任何参数,导致程序抛出了一个 ...
没看懂呢,我上面不是:
>>> abc(5, 6)
Traceback (most recent call last):
File "<pyshell#251>", line 1, in <module>
abc(5, 6)
File "<pyshell#250>", line 3, in abc
return abc()
TypeError: abc() missing 2 required positional arguments: 'x' and 'y'
还是要下面这样?不过下面这样也不行啊
>>> def abc(x, y):
z = x * y
return abc(5, 6)
>>> abc(5, 6)
Traceback (most recent call last):
File "<pyshell#254>", line 1, in <module>
abc(5, 6)
File "<pyshell#253>", line 3, in abc
return abc(5, 6)
File "<pyshell#253>", line 3, in abc
return abc(5, 6)
File "<pyshell#253>", line 3, in abc
return abc(5, 6)
RecursionError: maximum recursion depth exceeded
>>> abc()
Traceback (most recent call last):
File "<pyshell#255>", line 1, in <module>
abc()
TypeError: abc() missing 2 required positional arguments: 'x' and 'y'
>>> abc
<function abc at 0x000001AC8D8E04C8>
>>> abc()
Traceback (most recent call last):
File "<pyshell#262>", line 1, in <module>
abc()
TypeError: abc() missing 2 required positional arguments: 'x' and 'y'
>>> abc(x, y)
Traceback (most recent call last):
File "<pyshell#263>", line 1, in <module>
abc(x, y)
NameError: name 'x' is not defined
>>> abc(5, 6)
Traceback (most recent call last):
File "<pyshell#264>", line 1, in <module>
abc(5, 6)
File "<pyshell#260>", line 3, in abc
return abc(5, 6)
File "<pyshell#260>", line 3, in abc
return abc(5, 6)
File "<pyshell#260>", line 3, in abc
return abc(5, 6)
RecursionError: maximum recursion depth exceeded wp231957 发表于 2023-5-18 14:22
def abc(x, y):
z = x * y
return abc() 难道这里就不需要传参吗
请大神指点,我别搞糊涂了 wp231957 发表于 2023-5-18 14:25
def abc(x, y):
z = x * y
return abc(A,B) 即便这里你传了参,那么就涉及到递归函数 ...
大神,那怎么才是对的 lzb1001 发表于 2023-5-18 14:47
大神,那怎么才是对的
首先你要干什么 才能知道什么是对的
>>> def abc(x, y):
z = x * y
return abc(5, 6)
>>> abc(5, 6)
Traceback (most recent call last):
File "<pyshell#254>", line 1, in <module>
abc(5, 6)
File "<pyshell#253>", line 3, in abc
return abc(5, 6)
File "<pyshell#253>", line 3, in abc
return abc(5, 6)
File "<pyshell#253>", line 3, in abc
return abc(5, 6)
RecursionError: maximum recursion depth exceeded看到这个信息了没,死循环,我在四楼说过了的 wp231957 发表于 2023-5-18 14:58
首先你要干什么 才能知道什么是对的
>>> def abc(x, y):
2楼的大神不是说:
……正确的方式是在函数调用时传入参数,例如:abc(5, 6)。这样,函数就可以正确地执行并返回结果了。 lzb1001 发表于 2023-5-18 15:00
2楼的大神不是说:
……正确的方式是在函数调用时传入参数,例如:abc(5, 6)。这样,函数就可以正确地 ...
但是这跟你引发别的错误不冲突,你的递归变量的值一直没有改变肯定会超出递归的深度的
你先去好好理解一下闭包和递归的概念再回来纠结这个吧
首先我先声明一下闭包和递归没有半毛钱的关系,只是你最近一直纠结的问题都跟这两个有关系
wp231957 发表于 2023-5-18 14:25
def abc(x, y):
z = x * y
return abc(A,B) 即便这里你传了参,那么就涉及到递归函数 ...
他自己也陷死循环里出不来了{:10_250:} 越听越糊涂了啊我 lzb1001 发表于 2023-5-18 15:28
越听越糊涂了啊我
return 只能在函数中使用
return可以返回立即数(比较常用)
return可以返回函数地址(一般闭包中使用)
return 可以返回函数自己(递归中使用,比较常用)
return 可以返回空值(比如 print函数) 这段代码中报错是因为函数 abc() 调用了自己,并且没有传入必要的参数,导致递归过程中出现了缺少参数的错误。
具体来说,在 abc() 函数内部,它调用了 abc() 自身,并且没有传入任何参数,这意味着在递归过程中,每次调用 abc() 都会缺少必要的两个参数,从而导致 TypeError 错误。因此,您需要在 return abc() 语句中传入适当的参数,以便递归过程可以正常进行。
您可以尝试将代码修改如下:
def abc(x, y):
z = x * y
return abc(x-1, y-1) if x > 1 and y > 1 else z
print(abc(5, 6))
在这里,我们利用了递归来计算 x 和 y 的乘积,直到其中一个参数小于等于 1 时停止递归。对于每次递归,我们使用 x-1 和 y-1 作为新的参数传入,以便逐步逼近停止条件。最终,我们返回计算得到的乘积 z。
亲测可以运行
因为最后一行return abc()没有参数x和y,所以报错
可以这样改:
def abc(x, y):
z = x * y
return z
页:
[1]