python中定義函式時可以指定函式引數型別以滿足不同需要,也可以將各種型別引數組合起來使用,十分靈活。不同型別引數各有特色,如果使用恰當可以豐富函式功能,使用者呼叫函式時也方便很多。但用法不當時也會造成很多麻煩,得不償失。函式引數型別及特點:
1、位置引數
顧名思義,位置固定的引數,呼叫函式時需要一一對應為其賦值,不能不賦值,更不能不按設定型別賦值。
優點:用法簡單,在函式定義時按順序列在括號裡就行。
缺點:不夠靈活,必須知道每個引數型別及含義,為確保函式功能正常不得在函式中進行引數檢查。
例:
def pos_para(a,b,c,d):
print(a,b,c,d)
2、
預設引數
有些時候函式中某些引數存在預設值,或者為了簡化呼叫過程可以省略不寫,從而使用預設值執行函式。因此可以使用預設引數,預設引數用法是直接在定義函式時對其進行賦值。呼叫時如果沒有特殊需要可以不對其再次賦值。需要注意的是預設引數必須在位置引數(如果有)後面宣告。
優點:呼叫簡單,沒有特殊需求可以不賦值。
缺點:由於呼叫時省略賦值過程,預設引數為乙個空的list時需要將其內容初始化為none,即乙個無效的固定值,該值無特殊含義,只是因為python特性如果沒有初始化則「懸空」,如果在函式中為該list新增了成員,此list內容會儲存在新建立的list中下次再呼叫時又會在這個list基礎上增加新成員。
例(錯誤用法):
def default_para(l=):
return l
例(正確用法):
def default_para(l=[none]):
if l is none:
l =
以上兩種寫法的主要區別就是正確用法用無意義值none對新建的list進行初始化,函式使用這種不可變的引數很有用,可以確保多個任務同時訪問時也不會出錯。
3、可變引數
可變引數也是為了簡化使用過程,因為並未限制引數數量,使用起來十分靈活。可變引數的宣告只需要在引數名前面加乙個'*'即可,因此只需要乙個引數就能實現接受多個賦值。可變引數將接收到的值存放於乙個tuple中,再按照順序進行使用。
優點:靈活,簡化使用,引數數量較多直接賦值即可。
缺點:仍然需要檢查輸入型別是否符合設定。
例:
def variable_para(*para):
for n in para:
print(n)
4、
關鍵字引數
"關鍵字"這個詞可以讓人聯想到python中的某種資料型別->dict,因此,關鍵字引數的作用就類似乙個dict,呼叫時可以直接輸入乙個dict或者按照"key=value"的格式進行賦值。宣告關鍵字引數時只需要在引數名前邊加上"**"。
優點:可以擴充套件引數,在類似賦值物件的應用場景下很便捷。
缺點:必須按照dict的格式賦值,用途有限。不能限制輸入引數。
例:
def key_para(**kw):
print(kw)
key_para(name='thomas',age='18',gender='male')
5、命名關鍵字引數
命名關鍵字引數是為了解決關鍵字引數不能限制輸入引數的問題,如果不對輸入引數進行限制,可能出現未知問題。命名關鍵字引數的宣告很簡單,只需要用"*"將其與其他引數隔開,並且置於其他引數之後。因為有引數名限制,呼叫時需要按照引數型別進行賦值,就避免了不受限引數帶來的問題。
優點:限制引數範圍,減少因關鍵字引數不受限造成的錯誤。
缺點:不夠靈活。
例:
def named_key_para(a,b,*,name,age):
print(a,b,name,age)
6、
引數組合
在python中定義函式,可以用位置引數、預設引數、可變引數、關鍵字引數和命名關鍵字引數,這5種引數都可以組合使用。但是請注意,引數定義的順序必須是:必選引數、預設引數、可變引數、命名關鍵字引數和關鍵字引數。
例:
def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
def f2(a, b, c=0, *, d, **kw):
print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
在函式呼叫的時候,python直譯器自動按照引數位置和引數名把對應的引數傳進去。當然,也可以將前面幾個引數加入tuple,將後面幾個引數做成乙個dict直接進行賦值。
para1 = (1,2,3,a)
para2 =
f1(*para1,**para2)
para1 = (1,2,a)
para2 =
f2(*para1,**para2)
雖然引數組合基本可以滿足各種功能需求,但是用起來十分繁瑣且容易出錯,因此不建議在乙個函式中使用太多組合。 Python學習筆記 函式引數
定義函式的時候,我們把引數的名字和位置確定下來,函式的介面定義就完成了。對於函式的呼叫者來說,只需要知道如何傳遞正確的引數,以及函式將返回什麼樣的值就夠了,函式內部的複雜邏輯被封裝起來,呼叫者無需了解。python的函式引數十分靈活,可以分為 必選引數 作為函式呼叫的介面所必須具備的引數。預設引數 ...
Python學習筆記 函式引數
剛開始學習python,看了一些資料,總結記錄一下基本的python函式引數。python中函式定義,有五種引數分類,分別為 位置引數 預設引數 可變引數 關鍵字引數 命名關鍵字引數。1 位置引數 也稱必選引數,也就是函式呼叫時,必須傳遞實參值。這類引數很簡單,如下,呼叫add函式時必須傳值給引數x...
Python學習筆記 函式引數
power x,n 函式有兩個引數 x和n,這兩個引數都是位置引數,呼叫函式時,傳入的兩個值按照位置順序依次賦給引數x和n def power x,n 2 s 1 while n 0 n n 1 s s x return s預設引數必須指向不變物件!設定預設引數時,有幾點要注意 一是必選引數在前,預...