這兩天看了看Python,覺(jué)得要做一下筆記,其他方面沒(méi)什么難點(diǎn)番挺,但看了函數(shù)的參數(shù)那一塊兒之后發(fā)現(xiàn)還是要理清楚的,因此從函數(shù)參數(shù)開(kāi)始寫(xiě)屯掖。
函數(shù)的參數(shù)
位置參數(shù)
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
這段代碼中x和n是兩個(gè)位置參數(shù)玄柏,傳入值按照位置賦值給x和n。
默認(rèn)參數(shù)
當(dāng)只傳入一個(gè)參數(shù)時(shí)贴铜,會(huì)導(dǎo)致另一個(gè)參數(shù)為空而報(bào)錯(cuò)粪摘,因此需要有一個(gè)默認(rèn)值。
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
當(dāng)只傳入x一個(gè)參數(shù)時(shí)绍坝,那么就是計(jì)算平方值徘意。
注意
- 必選參數(shù)在前,默認(rèn)參數(shù)在后陷嘴。
- 有多個(gè)默認(rèn)參數(shù)時(shí),可以按順序提供參數(shù)间坐;也可以指明參數(shù)名稱(chēng)和值灾挨,如name=‘tian’邑退,其他參數(shù)使用默認(rèn)參數(shù)。
- 定義參數(shù)時(shí)默認(rèn)參數(shù)必須指向不變對(duì)象
可變參數(shù)
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
這個(gè)參數(shù)numbers就是可變參數(shù)劳澄,可以傳入1個(gè)地技、2個(gè)到任意個(gè),還可以是0個(gè)參數(shù)秒拔。
>>> nums = [1, 2, 3]
>>> calc(*nums)
14
*nums表示把這個(gè)list的所有元素輸入莫矗,然后進(jìn)行計(jì)算。
關(guān)鍵字參數(shù)
可變參數(shù)允許傳入0個(gè)或任意個(gè)參數(shù)砂缩,可變參數(shù)會(huì)組裝成tuple作谚。關(guān)鍵字參數(shù)允許傳入0個(gè)或任意個(gè)含參數(shù)名的參數(shù),這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動(dòng)組裝為一個(gè)dict庵芭。
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
這個(gè)函數(shù)中kw就是關(guān)鍵字參數(shù)
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
與可變參數(shù)類(lèi)似妹懒,extra把extra的所有元素傳到了參數(shù)kw中,且對(duì)kw的修改不會(huì)影響函數(shù)外的extra双吆。
命名關(guān)鍵字參數(shù)
- 用*限制
def person(name, age, *, city, job):
print(name, age, city, job)
這樣city和job必須傳入并且是以city=''和job=''的形式眨唬。
2.已有可變參數(shù)
def person(name, age, *args, city, job):
print(name, age, args, city, job)
那么不需要再加*了