函式的引數
定義函式(引數):
普通引數,預設引數,可變引數(可變位置引數,可變關鍵字引數),keyword-only 引數
呼叫函式(傳參):
位置引數,關鍵字引數,引數結構(位置引數解構,關鍵字引數解構)
普通引數 x,y:
def add(x,y)
return x + y
預設引數 x=1:
def inc(base,x =1):
return base +x
inc(3) 4
inc(3,2) 5
引數可以有預設值, 但當乙個引數有預設值時,呼叫時如果不傳遞此引數,會使用預設值
帶預設值引數必須在不帶預設值引數之後,否則會報錯syntaxerror
def inc(x=0,y):
return x+y
file "", line 1可變位置引數:定義引數時前面加乙個*,表示這個引數是可變的,可以接受任意多個引數,這些引數構成乙個元組,只能通過位置引數傳遞def inc(x= 0,y):
^syntaxerror
: non-default argument follows default argument
可變關鍵字引數:
定義引數時,在前面加**,表示這個引數可變,可以接受任意多個引數,這些引數構成乙個字典,只能通過關鍵字引數傳遞
引數的混合使用:
#位置引數可以和關鍵字引數一起使用
#當位置可變引數和關鍵字可變引數一起使用時候,可變位置引數必須在前
deffn(*
args,**
kwargs):
print(args)
print(kwargs)
fn(1,2,3,x=4,y=5)
(1,2,3)
(1, 2, 3)#普通引數可以和可變引數一起使用,但是傳參的時候必須匹配
deffn(x,y,*
args,**
kwargs):
print(x)
print(y)
print(args)
print(kwargs)
fn(1,2,3,4,5,a=6,b=7)
1
1#關鍵字可變引數不允許在普通引數之前2(3, 4, 5)
def fn(**kwargs,x):
print(x)
#上面的方式定義會出錯
#預設引數可以在可變位置引數之前
def fn(x=5,*args):
print(x)
pprint(args)
#位置可變引數可以在普通引數之前,但是在位置可變引數之後的普通引數變成可keyword-only 引數
keyword-only引數:
python3特性
#在*號之後的引數只能通過關鍵字引數傳遞的叫keyword-only引數
可變位置引數之後的引數也是keyword-only引數
def fn(*,x):
print(x)
fn(1,x=3) #此時x 只能通過關鍵字引數傳遞,如果安裝普通引數傳遞,會被*和可變位置引數吃掉
fn(x=3)
def fn(*args,x):
print(args)
print(x)
#keyword-only 引數可以有預設值
keyword-only 引數可以和預設引數一起出現,不管它有沒有預設值,不管預設引數是不是keyword-only
引數解構:
可以把乙個可迭代物件解構成位置引數
引數解構發生在函式呼叫用,可變引數發生在函式定義的時候
解構的兩種形式:
乙個星號*,解構的物件:可迭代物件,解構後的結果,位置引數
兩個星號**,解構的物件:字典,解構的結果,關鍵字引數
關鍵字引數解構,key必須是str型別
def add(a,b):
return a+b
data = [4,3]
print(add(*data)) #位置引數解構
data1 =
print(add(**data1)) #關鍵字引數解構
python 函式引數型別檢查
python在3.5後引入了引數型別註解,例 def add x int,y int int 對x,y和返回值都進行注釋,為int型別 return x y注 註解是對函式引數和返回值的 注釋 沒有強制定義的作用 因為python是動態語言啊 那麼既然註解不能強制定義型別,在函式呼叫中怎麼判斷傳入的...
python 函式引數型別檢查
在python中,不知道函式引數型別是乙個很正常的事情,特別是在乙個大專案裡。我見過有些專案裡,每乙個函式體的前十幾行都在檢查引數型別,這實在是太麻煩了。而且一旦引數有改動,這部分也需要改動。下面我們用裝飾器來實現,函式引數的強制型別檢查。首先,這個裝飾器,要接受型別引數,和指定函式引數的型別引數。...
Python函式的引數型別
1 位置引數 引數的位置 順序 很重要,形參和實參個數要匹配 2 關鍵字引數 對引數的位置要求不是很嚴格 3 預設值引數 1 如果形參中制定了預設值,在實參中可以不傳遞形參對應的實參 2 如果形參中指定了預設值,在實參彙總傳遞該引數後,最終引數以傳遞的實參為準 4 不定長引數 1 a 接受傳遞單個值...