我想知道為什么我的比較回傳False而不是True雖然'a' == 'a'。
def test(*values):
return values[0]=='a'
tuple = ('a',)
test(tuple)
輸出: False
uj5u.com熱心網友回復:
這是因為您正在使用*values而不是values在您的函式定義中
當您*args在函式中使用特殊語法時,args將作為元組回傳,其中每個 arg 是元組的一個元素。
所以例如
> def print_args(*args):
print(args)
> print_args('a', 'b', 'c')
# Outputs:
('a', 'b', 'c')
在您的情況下,因為您已經傳入了一個元組,所以在函式values中就像“好吧,我很樂意將元組作為我的第一個引數”,并values成為元組的元組(以及單個元組的元組) . 因此,您將 ('a',) 與 'a' 進行比較并且您的檢查失敗
TL;DR:要么直接傳入,'a'要么更改*values為values
def test(values):
return values[0] == 'a'
tuple = ('a',)
test(tuple)
# Outputs:
True
uj5u.com熱心網友回復:
在函式宣告中使用 *args 語法意味著所有引數都將被收集到一個新元組中。當你現在將元組傳遞給這個函式時,它會創建一個只有一個元素的元組,因為你只傳遞了一個引數。的值values是(('a',),)一個包含元組的元組。您可能想要做的是將元組傳播到涉及相同星號語法的函式呼叫中:test(*tuple)結果values == ('a',)如您所愿。
uj5u.com熱心網友回復:
像這樣修改你的函式:
def f(*v):
print(v)
return v[0] == 'a'
然后呼叫 f(('a',)), 你會得到 (('a',),) False 函式得到一個元組 ('a',) 而不是 'a'
uj5u.com熱心網友回復:
參考
def func(*args, **kwargs): ... var-keyword: 指定可以提供任意多個關鍵字引數(除了已經被其他引數接受的任何關鍵字引數)。這樣的引數可以通過在引數名稱前加上 ** 來定義,例如上面例子中的 kwargs。
https://docs.python.org/3/glossary.html#term-parameter
您沒有使用 *args 傳遞指向型別的指標。決議器認為您傳遞的關鍵字引數
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/373412.html
