我正在浏览Learning Python中的函数,这个让我有点理解,想知道是否有人可以帮助我更好地理解它,更具体地说是if test(arg, res)
当我运行第一个函数时,作为第一个参数并不重要,那么第二个参数必须是一个列表,它只是按照写入的方式将列表反射回来。当你将这些功能组合起来并将它们打印在一起时,我对它的最大值和最小值进行了混淆,我感到很困惑。
def minmax(test, *args):
res = args[0]
for arg in args[1:]:
if test(arg, res):
res = arg
return res
def lessthan(x, y): return x < y
def grtrthan(x, y): return x > y
print(minmax(lessthan, 4, 2, 1, 5, 6, 3))
print(minmax(grtrthan, 4, 2, 1, 5, 6, 3))
答案 0 :(得分:3)
您似乎误解了starred function argument的工作原理。当您将函数称为minmax(something, [1, 2, ...])
时,args
将成为一个等于[1, 2, ...]
的元素的元组。因此,循环体不会被执行,test
的值无关紧要。该函数应该被调用为minmax(something, 1, 2, ...)
。这种方式args
获取值(1, 2, ...)
,循环遍历其元素。
澄清:答案取决于你写的内容。您的代码段是正确的,并且完全符合预期。
答案 1 :(得分:0)
我还没读过那本书,所以我不知道上下文,但看起来函数(minmax
)没有很好的命名。它不返回两个值,它只返回一个 - 哪一个取决于你给它的测试函数。如果您传入lessthan
函数:
print(minmax(lessthan, 4, 2, 1, 5, 6, 3))
您将获得1
,如果您传入grtrthan
功能:
print(minmax(grtrthan, 4, 2, 1, 5, 6, 3))
您将获得6
。