2015-01-31 52 views
0

這可能會相當明顯,但由於某些原因,它不起作用。Python-函數不接受數字爲2的數字,儘管它有逗號

我具有的功能是這樣的:

def hours(num,num2): 

    return num , " hours and " , num2 , " minutes." 

該真實插入到該函數是:

total(final) #this isn't really important, just wanted to show that it was a function 
      #plugging into another function. This function puts out 2 numbers in a (n,m) 
      #format. 

其中出來與一個數字,是在一個(N,M)格式 當我嘗試將(n,m)插入第一個函數時,它不起作用?我認爲它應該是因爲它以逗號分開,這就是第一個函數所要求的,但我不知道。

+0

你將不得不調用'小時(*總(最終))',迫使它來解壓。 – 2015-01-31 22:39:41

+0

您需要'*'的東西,正如Bothwell先生所暗示的,並在一些答案中解釋的,但我認爲這並不能阻止您的麻煩,因爲在我看來,您的「小時」函數返回的不是您期望......返回num +「小時和」+ num2 +「分鐘。」'或'return「%d小時和%d分鐘。」%(num,num1)'看起來對我更有用---但我可能是錯的。 – gboffi 2015-01-31 22:56:47

回答

0

試試這個:

def total(final): 
    return (10, 20) 

def hours(num1, num2): 
    print num1, num2 

result = total(4) 
hours(*result) #explode result tuple into two arguments 

--output:-- 
10 20 

元組,像(10, 20)是一個事情,因此只看作一個說法。它不喜歡這樣的工作:

hours((10, 20)) 
      | | 
      V V 
def hours(num1, num2): 

相反,它的工作原理是這樣的:

hours((10, 20)) 
     |------| 
      | 
      V 
def hours(num1, num2): 

...這意味着你沒有提供NUM2參數。

然而,寫作:

hours(*(10, 20)) 

爆炸解析成兩個參數:

hours(10, 20) 
+0

它的工作!非常感謝!! – 2015-01-31 23:04:59

+0

@bardofshipping,不客氣。或者,你可以像這樣定義小時:'def hours(numbers):',那麼對於函數體的第一行write:'num1,num2 = numbers' – 7stud 2015-01-31 23:13:11

0

這是一個有點難以啓齒基礎上,你的問題的措辭,但我認爲你所說的是這樣的:

hours(total(final)) 

不按預期工作,其中total返回類似return n,m

如果是這樣,你需要使用什麼俗稱圖示操作,Python的語法拆包參數:

hours(*total(final)) 

*操作,對輸入參數的方法使用時,擴大了list/tuple/iteratable,並將結果用作方法的位置參數。 I.E.

ex = 1,2 
foo(*ex) 
# is equivalent to 
foo(1,2) 

如果省略*運營商,一個元組將一起通過一個單一的位置參數,而不是被解開。

相關問題