2016-11-30 58 views
4

我目前正在學習Python,希望有人能幫助我。 我對編碼相當陌生,所以如果解釋得很好,它會非常有用。如何使用函數的輸出作爲函數內另一個函數的輸入

可以說我有一個名爲function1函數返回:

return (row, column) 

現在我正在寫另一個叫功能說function2。 在這個功能我要打電話說:

exampleItem.exampleName(row, column, name) 

如何使用function1這是行和列從function2上面一行的rowcolumn參數的輸出?

我真的希望這是有道理的,因爲我之前沒有正確地寫出問題而嚴重受到懲罰,因爲我沒有意識到這裏的最佳做法。

+1

什麼是您的Python版本? – Kasramvd

+0

我使用3.5.2我相信。現在已經通過這個偉大的社區解決了這個問題:D – Gazza732

+1

Hey Gazza,如果其中一個答案解決了您的問題,您可以通過單擊複選標記旁邊的複選標記來標記一個答案,請參閱[如果有人回答我的問題?](http://stackoverflow.com/help/someone-answers) –

回答

6

您可以使用星*解壓結果 - 這是一個元組 - 調用函數function1你把它作爲其他函數內部發生爭吵後的。這導致提供的位置參數從function1返回的元素在第二:

exampleItem.exampleName(*function1(), name) 

在Python 2.x你可以做相同的,但,你需要供應剩餘位置參數的關鍵字的形式,以得到它與*工作:

exampleItem.exampleName(*function1(), name=name) 

這也適用於Python的3.x的,所以你有便攜性沒有問題。

當然,拆包與row, column = function1()以前的語句,然後按位置將它們提供給第二個函數:

exampleItem.exampleName(row, column, name) 

是另一種選擇。這真的下降到偏好到底:-)

+0

推薦最後一個例子。如果任何一種方法的界面發生變化,則意味着比一切都明確的調試工作更困難。 –

7

在Python的所有版本中,你可以這樣做:

row, column = function1() 
exampleName(row, column, name) 

在較新版本(3.5+),可以使用拆包做這樣的事情:

exampleName(*function1(), name) 

如需進一步閱讀,請參閱:PEP 448 -- Additional Unpacking Generalizations

2

這叫做「tuple unpacking」,它接受元組(或列表)的各個部分並將它們用作參數。

如果f1(row, column)是函數返回(row, column)(一個簡單的例子的緣故):

a = f1(3, 4) 
b = exampleItem.exampleName(*a, name="fish") 

# Or, as a one-liner: 
b = exampleItem.exampleName(*f1(3,4), name="fish") 

這裏的主要限制是元組解包參數後(如上a,你解開一個*) ,所有進一步的參數必須按名稱分配,而不是位置分配。

如果不能給出具體的參數名稱,如果你還在使用Python 2,你需要做這樣的事情:

x, y = f1(3, 4) # unpacks the length-2 tuple into two variables 
b = exampleItem.exampleName(x, y, "fish") 

不能做成一個班輪。不過,Python 3並不要求這樣做,因此如果您使用Python 3,則無需在第三個參數上使用name=即可執行第一個示例。

另一個相關說明:如果您使用**,則可以解壓縮一個字典,除了命名參數而不是位置參數外,它與解開元組的操作相同。

相關問題