python的函式引數挺重要的,總結一下:
(1)位置引數:沒啥好說的,就是普通的引數。
(2)預設引數
:
引數形式:def power(x, n = 3): (在函式定義時通過對乙個形參賦值的形式,來實現預設引數)
特別注意:預設引數一定要為不可變物件
1def add_end(l=):
end')3
return l
原因解釋如下:
python函式在定義的時候,預設引數l
的值就被計算出來了,即,因為預設引數
l
也是乙個變數,它指向物件,每次呼叫該函式,如果改變了
l
的內容,則下次呼叫時,預設引數的內容就變了,不再是函式定義時的了。(原因最好也了解一下)
要修改上面的例子可以用none
這個不變物件來實現。
1def add_end(l=none):
2if l is
none:
3 l =
end')5
return l
為什麼要設計str
、none
這樣的不變物件呢?因為不變物件一旦建立,物件內部的資料就不能修改,這樣就減少了由於修改資料導致的錯誤。此外,由於物件不變,多工環境下同時讀取物件不需要加鎖,同時讀一點問題都沒有。我們在編寫程式時,如果可以設計乙個不變物件,那就盡量設計成不變物件。(不變物件的優點)
(3)可變參數:
引數形式:
1def calc(*numbers):
2 sum =0
3for n in
numbers:
4 sum = sum + n *n
5return sum
機理:函式在呼叫時,把接收到的引數組裝成乙個tuple,傳遞引數時可以傳遞任意引數。
在傳遞引數時,如果我們已經有乙個list或者tuple。這裡給出有兩種方法:
1 calc(nums[0], nums[1], nums[2])2 calc(*nums)
在第二種方法中,python允許你在list或tuple前面加乙個*
號,把list或tuple的元素變成可變引數傳進去。(例子參考廖雪峰**)
(4)關鍵字引數:
引數形式:
1def person(name, age, **kw):
2print('
name:
', name, '
age:
', age, '
other:
', kw)
34 >>> person('
adam
', 45, gender='
m', job='
engineer')
5 name: adam age: 45 other:
機理:關鍵字引數允許你傳入0個或任意個含引數名的引數,這些關鍵字引數在函式內部自動組裝為乙個dict。
在傳遞引數時,如果我們已經有乙個dict:
1 person('jack
', 24, **extra)
**extra
表示把extra
這個dict的所有key-value用關鍵字引數傳入到函式的**kw
引數,kw
將獲得乙個dict,注意kw
獲得的dict是extra
的乙份拷貝,對kw
的改動不會影響到函式外的extra
。
(與可變引數類似)
(5)命名關鍵字引數:
引數形式:
1def person(name, age, *, city, job):
注:如果函式定義中已經有了乙個可變引數,後面跟著的命名關鍵字引數就不再需要乙個特殊分隔符*
了:
1def person(name, age, *args, city, job):
使用時:命名關鍵字引數必須傳入引數名,這和位置引數不同。如果沒有傳入引數名,呼叫將報錯:
1 >>> person('jack
', 24, '
beijing
', '
engineer')
2traceback (most recent call last):
3 file "
", line 1, in
4 typeerror: person() takes 2 positional arguments but 4 were given
引數的預設值:命名關鍵字引數可以有預設值,從而簡化呼叫,其中命名關鍵字引數city
具有預設值,呼叫時,可不傳入city
引數:
1def person(name, age, *, city='
beijing
', job):
2print
(name, age, city, job)
34 >>> person('
jack
', 24, job='
engineer')
5 jack 24 beijing engineer
引數定義的順序必須是:必選引數、預設引數、可變引數、命名關鍵字引數和關鍵字引數。
C 五大函式
析構函式 釋放掉在物件使用期間獲得的資源,包括關於任意的new操作呼叫對應的delete,關閉任何開啟的檔案,等等。拷貝建構函式和移動建構函式 構造乙個新的物件,被初始化為與另乙個同樣型別物件相同的狀態。如果這個已存在的物件是乙個左值,那麼就用拷貝建構函式 而如果這個已存在的物件是乙個右值,那麼就用...
django admin中的五大配置引數
list display 控制展示字段,注意不能放多對多字段 list display links 控制跳轉字段 search fields 配置在前端可用的查詢字段,查詢欄位是或關係 list filter 設定過濾字段,建議放外來鍵字段用來做過濾並且上下是and關係 actions 批量處理函式...
python五大排序 五大排序演算法(Python)
釋放雙眼,帶上耳機,聽聽看 所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序演算法,就是如何使得記錄按照要求排列的方法。氣泡排序 基本思想 兩個數比較大小,較大的數下沉,較小的數冒起來。演算法描述 比較相鄰的元素。如果第乙個比第二個大,就交換它們兩個 對每...