定義
-
def語句后依次接函數(shù)名、括號、括號中的參數(shù)和冒號:,然后在縮進塊中編寫函數(shù)體,返回值用return語句返回。
- 不帶
return語句的函數(shù)返回None。
- 函數(shù)可以返回多個值,以逗號分隔。其實返回的是一個
tuple。接受函數(shù)返回的多個值時根據(jù)位置進行賦值。
def test(x, y):
return x + 1, y + 1
a, b = test(1, 2)
print(a, b)
# 2 3
c = test(3, 4)
print(c)
# (4, 5)
默認參數(shù)
- 必選參數(shù)在前,默認參數(shù)在后。
- 變化大的參數(shù)在前,變化小的參數(shù)在后,作為默認參數(shù)。
- 有多個默認參數(shù)時可以按順序提供參數(shù),也可以不按順序提供參數(shù),此時需要把參數(shù)名寫上。
def power(x, y=2, z=3):
return x+1, y+1, z+1
print(power(5, z=4, y=8))
# (6, 9, 5)
- 默認參數(shù)必須指向不變對象。
可變參數(shù)
- 可變參數(shù)就是參數(shù)的個數(shù)是可變的
- 使用方法:
def calc(*numbers):
sum = 0
for num in numbers:
sum += num
return sum
print(calc(1, 2, 3, 9))
# 15
- 在參數(shù)之前添加
*號,函數(shù)內(nèi)部接收到的參數(shù)numbers是一個tuple。
- 如果已經(jīng)有一個list或tuple,在list或tuple前添加一個
*就可以把list或tuple中的元素轉(zhuǎn)換為可變參數(shù)傳入。(與JS中的拓展運算符作用類似)
關(guān)鍵字參數(shù)
- 關(guān)鍵字參數(shù)允許提供任意多個參數(shù),這些參數(shù)在函數(shù)調(diào)用時組裝成一個
dict。
- 使用方法:
def person(name, age, **kw):
print('name: ', name, 'age: ', age, 'other:', kw)
person('alex', 22, gender='m')
# name: alex age: 22 other: {'gender': 'm'}
- 與可選參數(shù)類似,在一個
dist之前加上兩個*號可以把dist轉(zhuǎn)換為關(guān)鍵字參數(shù)。
命名關(guān)鍵字參數(shù)
- 命名關(guān)鍵字參數(shù)限制了能傳入的關(guān)鍵字參數(shù)的名字。
1. 在位置參數(shù)與命名關(guān)鍵字參數(shù)間必須有特殊的*作為分隔。
def person(name, age, *, gender,job):
print('name: ', name, 'age: ', age, 'gender: ', gender, 'job: ', job)
person('alex', 22, gender='m', job='ee')
# name: alex age: 22 gender: m job: ee
- 如果在命名關(guān)鍵字參數(shù)之前已經(jīng)有了可變參數(shù),后面跟著的關(guān)鍵字參數(shù)就不需要特殊分隔符
*了。
- 命名關(guān)鍵字參數(shù)可以有默認值。
參數(shù)組合
- py中有五種參數(shù):必須參數(shù)、默認參數(shù)、可變參數(shù)、命名關(guān)鍵字參數(shù)和關(guān)鍵字參數(shù)。
- 組合使用這五種參數(shù)時順序必須是:必須參數(shù)、默認參數(shù)、可選參數(shù)、命名關(guān)鍵字參數(shù)和關(guān)鍵字參數(shù)