def hello(name1='python',name2='java'):
print('name1 %s nmae2 %s'%(name1,name2))
hello('shit')
hello('1','2')
hello(name2='c',name1='c++')
多個(gè)參數(shù)傳遞的時(shí)候 ? 可以按照順序傳遞 但是這樣沒法第一個(gè)不賦值直接給第二個(gè)賦值?
因此我們提出第二種方式傳參 ?即直接將參數(shù)名寫出來賦值傳參 就像
hello(name2='c',name1='c++')
def fun(a,*p):#這種寫法比較正常 ?帶星號(hào)的可變長(zhǎng)度參數(shù)會(huì)一把抓進(jìn)來其后所有的傳遞參數(shù)
#因此 應(yīng)該把單一不帶星號(hào)的變寫在星號(hào)參數(shù)之前 ? 防止a無參可接受
#p將作為元組存儲(chǔ)下來
print(type(p))
print(p) ? ?
print(a)
fun(1,2,3,4)
#輸出
class 'tuple'
(2, 3, 4)
1
以上操作 如果是倆** ?就是存儲(chǔ)為字典
特別注意 你要是字典 賦值的時(shí)候必須是 (左值=右值)的形式
做出來的字典也就是{‘左值’:右值}這種形式
def fun(a,**p):
print(type(p))
print(p)
print(a)
fun(a=1,b=2,c=3,d=4)
輸出<class 'dict'>
{'b': 2, 'c': 3, 'd': 4}
1
特別注意這時(shí)候**的參數(shù)必須在所有參數(shù)的最后
應(yīng)用實(shí)例 ?把字典作為函數(shù)參數(shù) ?傳遞的時(shí)候一堆參數(shù)全部寫進(jìn)字典 ?有重復(fù)的就覆蓋掉
相當(dāng)于參數(shù)初始值覆蓋
def cube(name,**nature):
all_nature = {'x':1,
'y':1,
'z':1,
'color':'white',
'weight':1
}
all_nature.update(nature)
print(name,"立方體的屬性")
print('體積:',all_nature['x']*all_nature['y']*all_nature['z'])
print('顏色:',all_nature['color'])
print('重量:',all_nature['weight'])
cube('first')
cube('second',y=3,color='red')
cube('third',z=2,color='green',weight=10)
輸出
first 立方體的屬性
體積: 1
顏色: white
重量: 1
second 立方體的屬性
體積: 3
顏色: red
重量: 1
third 立方體的屬性
體積: 2
顏色: green
重量: 10
下面拆解元組 列表 字典
def sum1(a,b):
return a+b
alist=[1,2]
print(sum1(*alist))#*將列表解成參數(shù)
print(sum1(*(4, 7)))#*將元組解成參數(shù)
print(sum1(**{'a':3,'b':9}))#把字典中 a對(duì)應(yīng)的值傳進(jìn)去 b對(duì)應(yīng)的值傳進(jìn)去
#輸出
3
11
12