代碼示例
先說一個*號
def function(x,*y):
sum = 0 #接收的變量要先定義一個初始值
for h in y:
sum = sum + h
sum = sum + x
print sum
return sum
num1 = {1:8,2:9.0,30:3}
num2 = (5,)
num3 = [6]
num4 = [1,3.0,6]
num5 = [] #num =None ,用None Type是不允許的
function(10,*num1)
function(10,*num2)
function(10.58,*num3)
function(10,)
function(10,*num4)
function(10,*num5)
# error ,y=2不可以直接傳給*y#
function(x=1,y=2)
代碼說明了幾個問題
- 函數(shù)原型中的 *y 參數(shù),可以接收的范圍包括: list, tuple, dict, 數(shù)據(jù)類型(int 或 float都行), 這些序列都可以為空,但是不能傳入None類型 , dict 只會在key值為數(shù)據(jù)類型時,把key值相加
- 如果去打印,可以看到 *y接收近來的數(shù)據(jù)會自動轉(zhuǎn)換成一個元組類型 tuple,也就是說在for h in y時,是從y這個元組里取數(shù)據(jù),輸出結(jié)果
- 可變參數(shù) *y 是可以包含空序列的()
- 不能直接將序列傳入,也就是說,類似于 function(10, (1,2,3)) 或 function(10,[1,2,3]) 是不允許的, 但是可以調(diào)用 function(10)或function(10,)來表示空。結(jié)果如圖:
示意圖
** 兩個型號表示“關(guān)鍵字傳遞”,毫無疑問是針對字典dict
def person(name, age, **kw):
print 'name:', name, 'age:', age, 'other:', kw
person('Mike',28)
person('Mike',28,key="value")
person('Mike',28,key="value",A=7)
- 如圖上面
*y
一樣,**也可以傳遞空的字典 -
**kw
支持多個Key:value
輸入,中間用逗號隔開。
因為dict是無序序列,因此輸出時候不會按照你輸入的key排列,下列輸出效果所示(和輸入相反)
日志打印