2012-10-23 78 views
1

我是python的新手。請看這個腳本:在* args變量函數中傳遞多個變量

def myfunc(*args): 
    print len(args) 
    if args == 3: 
     for arg in args: 
      print arg 
    else: 
     print "exit" 
a, b, c = 1, 2, 3 
myfunc(a, b, c) 

正如你所看到的,傳遞給函數的參數數量是3。現在條件args==3True,但執行else部分。而另一方面,如果if條件爲false,那麼將執行該代碼部分並跳過else

你能解釋爲什麼if語句在False條件下執行嗎?

回答

4

我認爲你必須做len(args)==3,而不是args==3

if len(args)==3: 

條件args==3永遠不會是真的爲args在函數內部的元組。

所以即使你通過myfunc(3),那麼你也會匹配(3,)==3,這就是False

+0

ahhhhh非常感謝你。打印args和len(args)後,現在我明白了爲什麼。 :) –

+0

@SultanAshfaq很高興幫助。 :) –

7

不,args == 3不是True。你可能意思是len(args) == 3

+0

或在參數中可能是'3' – savruk

+0

@savruk但只*非常*也許。 – 2012-10-23 09:49:57

+0

完全同意那裏,因爲我沒有很好地閱讀這個問題。我的遺憾 – savruk

0

您必須申請len(args) == 3而不是args == 3,因爲如果你使用args那麼它是元組的列表,如果你對證必須去else條件。

def myfunc(*args): 

    if len(args) == 3: 
     for arg in args: 
      print arg 
    else: 
     print "exit" 
a, b, c = 1, 2, 3 
myfunc(a, b, c) 

此代碼給你預期的結果。

+2

你的答案與其他兩個答案有什麼不同嗎?和'args'不是'tuple'列表,它只是一個'元組'。 –