2014-12-04 84 views
-1

我有一個函數f(* args)。用戶輸入一串用逗號分隔的單詞,我用.split(',')將它分成一個列表。我希望能夠在列表中有n個單詞的情況下調用函數f(word1,word2,...,wordn)。我怎樣才能做到這一點?在Python中,將變長列表的每個元素都變成函數調用?

請注意,我只想將f定義爲f(list)並只輸入列表,但教師要求我們使用f(* args)。

示例:用戶輸入'hi,church,banana',我分成列表['hi','church','banana'],我想打電話給f('hi','church' '香蕉')。我不知道如何做最後一步,因爲用戶可以輸入任意數量的單詞。

+0

你試過了什麼?你的問題在哪裏?在知道要傳遞的內容而不是'list'還是解析函數定義中的'* args'? – xnx 2014-12-04 17:34:18

+0

@xnx無論列表長度是多少,我都希望能夠調用f(word1,word2,...,wordn)給出一個列表中的值。我不知道該怎麼做,因爲我不能只做f(list [0],list [1],list [2]),因爲列表可以是任意長度。而已。 – MCT 2014-12-04 17:38:28

+0

你無法像你想的那樣稱呼它,正是因爲你不知道你會有多少個參數。閱讀一下'*'操作符實際做了什麼,你會意識到你可以在任何地方使用它 - 而不僅僅是當你解開參數時。 – 2014-12-04 17:43:30

回答

1

試試這個:

def f(*words): 
     for word in words: 
      print word 

    line = "This is a line of text with multiple words" 
    words = line.split() 

    f(*words) 

的使用注意事項*在通話中將列表解包成一個元組,它與多個參數的調用實際上相同

+0

這是完美的。謝謝。 – MCT 2014-12-04 17:58:18

0

當你定義一個def f(*args):功能都傳遞給函數的參數出現的順序args在其中您可以遍歷:

def f(*args): 
    for arg in args: 
     print arg 

f('Foo', 'Bar', 'Spam') 

Foo 
Bar 
Spam 
+0

這不是我最輕微的要求。我知道參數。 – MCT 2014-12-04 17:58:57

+0

在您之前的評論中,您明確表示您希望能夠調用'能夠調用f(word1,word2,...,wordn)'。 – xnx 2014-12-04 18:45:39

+0

是的。但你不明白我的問題的其餘部分。我顯然已經明白如何做f(word1,word2,word3),但我希望能夠調用f(word1,word2,...,wordn),無論有多少單詞。因此,f(* list)正如託尼薩福克上面所說的那樣適合這個法案。 – MCT 2014-12-09 22:28:17

相關問題