2016-01-04 81 views
2

我正在通过Learning Python中的函数,这个给我一点点麻烦理解,想知道是否有人可以帮助我更好地理解它,更具体地说是if test(arg, res) 当我运行第一个函数时,不管我把第一个参数放在什么位置,那么第二个参数必须是一个列表,并且它只是按照书面形式将列表重新排列。我很困惑你何时将功能组合在一起,并将它们打印在一起,如何给出最大值和最小值。了解maxmin功能

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)) 
+4

“那么第二个参数必须是一个列表”你确定你正在阅读它吗? –

回答

3

您好像误解了starred function argument的工作原理。当您将函数称为minmax(something, [1, 2, ...])时,args将变成一个元素的元组,其值等于[1, 2, ...]。因此循环的主体永远不会被执行,并且test的值无关紧要。该函数应该被调用为minmax(something, 1, 2, ...)。这种方式args得到价值(1, 2, ...)和循环遍历其元素。

澄清:答案是基于你写的。你的代码片段是正确的,并按照预期工作。

+0

lessthan和grtrthan函数的参数来自哪里?他们需要两个权利? – CDog

+0

在你的代码中'test'等于'lessthan'或'grtrthan'。然后它被两个参数调用。 – fjarri

+0

你能解释for循环吗?当我将res = arg更改为res> arg或res CDog

0

我还没有读过那本书,所以我不知道上下文,但它看起来功能(minmax)没有很好的名称。它不会返回两个值,它只返回一个值 - 哪一个取决于您提供的测试功能。如果您在lessthan函数传递:

print(minmax(lessthan, 4, 2, 1, 5, 6, 3)) 

你会得到1,如果你在grtrthan函数传递:

print(minmax(grtrthan, 4, 2, 1, 5, 6, 3)) 

你会得到6