有乙個函式,引數個數不一定,定義可變引數
def test_1(*numbers):
print(numbers, type(numbers))
test_1(1, 2, 3, 4) # 傳入了4個引數
test_1(1, 2, 3) # 傳入了3個引數
(1, 2, 3, 4) (1, 2, 3)
這樣定義引數以後,會發現寫入的n個引數在函式內部numbers接收到的是乙個元組
那如果傳入的引數本身就是乙個元組或者list的話
p1 = (1, 2, 3, 4)
p2 = [1, 2, 3]
test_1(p1)
test_1(*p1)
test_1(p2)
test_1(*p2)
執行結果為:
((1, 2, 3, 4),) (1, 2, 3, 4) ([1, 2, 3],) (1, 2, 3)
會發現如果在呼叫函式的時候test_1(*(1, 2, 3, 4)),等同於test_1(1, 2, 3, 4)
如果在呼叫函式的時候不加*,則會把元組或者list作為乙個引數傳進去,那麼他們整體就會作為元組的第乙個元素
思考在呼叫函式的時候加*和在定義函式的時候加*
def test_2(x, y):
print('x', x)
print('y', y)
test_2(*(1, 4))
執行結果為:
x 1
y 4
在定義函式的時候用*,那麼引數接收到的就是乙個元組
如果在呼叫函式的時候用*,就會把乙個元組或者list的所有元素作為可變引數傳進去
**的用法和*的用法類似
def test_1(**kw):
print(kw, type(kw))
def test_2(city, name):
print('city', city)
print('name', name)
test_1(city='成都', age=18)
dic =
test_1(**dic)
test_2(**dic)
執行結果為:
city 成都
name 張三
python中的可變引數和不可變引數
知識點 python中,萬物皆物件。python中不存在所謂的傳值呼叫,一切傳遞的都是物件的引用,也可以認為是傳址。python在heap中分配的物件分成兩類 可變物件和不可變物件。所謂可變物件是指,物件的內容可變,而不可變物件是指物件內容不可變。不可變 immutable int 字串 strin...
Python可變引數
在python函式中,還可以定義可變引數。顧名思義,可變引數就是傳入的引數個數是可變的,可以是1個 2個到任意個,還可以是0個。以數學題為例子,給定一組數字a,b,c 請計算a2 b2 c2 要定義出這個函式,我們必須確定輸入的引數。由於引數個數不確定,我們首先想到可以把a,b,c 作為乙個list...
python 可變引數
1.args可以使用陣列和元組 2.kwargs可以使用字典作為引數def t args p,args 把陣列 元組作為引數傳遞給 args param p param args return print p for a in args print a deft kw p,kwargs 把字典作為可...