2016-01-04 78 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