1.函數簡介
- 函數也是一個對象
- 函數用來保存一些可執行的代碼,在需要時可以重複調用
'''
語法:
def fn(形參1,形參2...):
代碼塊
'''
def fn():
print('這是第一個函數')
fn()
- 注意:函數名必須符合標識符命名規範(可以包含字母、數字、下劃線,但不能以數字開頭)
2.函數的參數
2.1形參和實參
- 形參(形式參數)定義形參就相當於在函數內部聲明瞭變量,但是並不賦值
- 實參(實際參數)指定了形參,在調用函數時必須傳遞實參,實參將會給形參賦值,實參與形參數量應保持相同
'''
賦值——是調用時賦值,或者定義時賦值
可以在定義函數時,在括號裏面定義數量不等的形參
函數定義時有形參,調用時也得有實參否則報錯
'''
def s(a,b):
print(a+b)
s(5,6)
2.2函數的傳遞方式
- 默認值——定義形參時,可以爲形參指定默認值,但是若調用時有實參,則默認值被覆蓋
- 位置傳參——將對應位置的實參賦值給對應位置的形參
- 關鍵字傳參——可以不按照形參的位置傳遞參數,只要是按照形參的名稱對應賦值即可
- 混合使用位置參數與關鍵字參數——位置參數必須在關鍵字參數之前
'''
默認值,c=10這個默認值,如果函數調用時另外傳遞實參,則不調用默認值,調用實參
如果函數調用時不傳遞這個實參,則調用默認值
即不傳遞實參,默認值生效
'''
'''
參數的傳遞方式
位置傳參
關鍵字傳參
'''
def fn( a, b, c=10):
print('a =', a)
print('b =', b)
print('c =', c)
fn(4, 5, 6)
fn(4, 5)
fn(b=4, c=5, a=6)
fn(1, 2, c=30)
'''
原理:形參和實參,位置傳參和關鍵字傳參
舉例:
import requests
headers={}
url=''
requests.request(url, headers=headers)
'''
3.不定長參數
- 用於位置傳參的*args,在定義函數時,在一個形參前加上*,則這個形參可以獲取多個實參(多個實參存入元組中),
- 帶*的形參可以和關鍵字傳參配合使用,但是隻能有一個
- 帶*的形參不能處理關鍵字傳參,關鍵字傳參可以用帶**的形參
- 用於關鍵字傳參的 **kwargs,獲取的多個實參是存入字典中,key=關鍵字傳參中的實參名,value=關鍵字傳參中的實參值
- 帶**的形參只能有一個,必須寫在最後
- 裝包–存入元組或字典
- 解包–遍歷元組或字典
def fn(a,b):
print(a+b)
fn(1, 2)
'''
裝包:
通過*b的形式傳遞位置參數,將所有實參存入元組b中
'''
def fn1(*b):
print('b =', b, type(b))
fn1(1,2,3,4,5)
'''
解包:
遍歷(通過*b存入元組中b)已經裝包的實參,即遍歷一個元組
'''
def s(*b):
r=0
for i in b:
r+=i
print(b,'各元素累加結果爲:', r)
s(1,3,54,6,6)
'''
可以有多個參數,剩餘元素統一裝入*b
*b此類參數只能有一個
若*b不是最後一個參數,其後的參數必須使用關鍵字傳參
*b形參,當實參都是關鍵字傳參時,錯誤
**b將關鍵字實參裝包人字典
即*形參不接收關鍵字參數,處理位置參數,**形參可以接收關鍵字參數,並處理
'''
def fn2(a,b,*c):
print('a =', a)
print('b =', b)
print('c =', c)
fn2(1,3,4,6,7,8,8)
def fn3(a,*b,c):
print('a =', a)
print('b =', b)
print('c =', c)
fn3(1,3,4,6,7,8,c=8)
def fn4(**b):
print('b =', b, type(b))
fn4(a=1,b=2,c=3)
def s1(a,c,**b):
print('a =', a)
print('b =', b)
print('c =', c)
s1(c=3,b=6,d=0,e=5,a=1,f=8)
s1(1,2,b=6,d=0,e=5)
'''
正規的寫法:*args,**kwargs
def fn(*args,**kwargs):
語句塊
'''
4.參數的解包
- 用於位置傳參的*args在裝包解包過程是通過元組、列表
- 用於關鍵字傳參的 **kwargs在裝包解包過程是通過字典
'''
參數t爲元組、列表時通過*t可以將t中的元素依次賦值給函數中的形參,元素個數與形參個數必須一致
參數t爲字典時通過**t可以將t中的k-v中的value值依次賦值給函數中的形參,k-v個數與形參個數必須一致
'''
def fn(a,b,c):
print('a =', a)
print('b =', b)
print('c =', c)
t={'a':1, 'b':2, 'c':3}
print(type(t))
fn(**t)