定義函式的時候,我們把引數的名字和位置確定下來,函式的介面定義就完成了。對於函式的呼叫者來說,只需要知道如何傳遞正確的引數,以及函式將返回什麼樣的值就夠了,函式內部的複雜邏輯被封裝起來,呼叫者無需了解。
python的函式定義非常簡單,但靈活度卻非常大。除了正常定義的必選引數外,還可以使用預設引數、可變引數和關鍵字引數,使得函式定義出來的介面,不但能處理複雜的引數,還可以簡化呼叫者的**。
def
sum(x,y):
sum=x+y;
return sum;
預設引數在後,否則python的直譯器會報錯
def
sum(x,y=4):
sum=x+y;
return sum;
預設引數很有用,但使用不當,也會掉坑里。預設引數有個最大的坑
先定義乙個函式,傳入乙個list
def
add(l=):
return l;
輸出結果:
>>> add(l=[1,2,3])
[1, 2, 3, 'a']
>>> add()
['a']
>>> add()
['a', 'a']
>>>
預設引數是,但是函式似乎每次都「記住了」上次新增了』a』後的list。
def
add(l=none):
if l is
none:
l=;return l;
為什麼要設計str、none這樣的不變物件呢?因為不變物件一旦建立,物件內部的資料就不能修改,這樣就減少了由於修改資料導致的錯誤。此外,由於物件不變,多工環境下同時讀取物件不需要加鎖,同時讀一點問題都沒有。我們在編寫程式時,如果可以設計乙個不變物件,那就盡量設計成不變物件。
在python函式中,還可以定義可變引數。顧名思義,可變引數就是傳入的引數個數是可變的,可以是1個、2個到任意個,還可以是0個。
請計算a2 + b2 + c2 + ……。
def
calc2
(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
定義可變引數和定義乙個list或tuple引數相比,僅僅在引數前面加了乙個*號。在函式內部,引數numbers接收到的是乙個tuple,因此,函式**完全不變。但是,呼叫該函式時,可以傳入任意個引數,包括0個引數:
>>> calc2()
0>>>
如果已經有乙個list或者tuple,要呼叫乙個可變引數怎麼辦?可以這樣做:
>>> calc2(*nums)
14>>>
*nums表示把nums這個list的所有元素作為可變引數傳進去。這種寫法相當有用,而且很常見。
可變引數允許你傳入0個或任意個引數,這些可變引數在函式呼叫時自動組裝為乙個tuple。而關鍵字引數允許你傳入0個或任意個含引數名的引數,這些關鍵字引數在函式內部自動組裝為乙個dict。
走進HTML的世界
html是用來描述網頁內容的一種語音。html用來描述網頁被稱之為html標籤。有如下標籤 2 html一般是成對出現,比如和 3 成對的標籤裡,第乙個 不帶 叫開始標籤,第二個叫結束標籤。4 有些標籤裡沒有結束標籤的,稱為 單標籤 一般寫法是開始標籤在關鍵字後跟上乙個,比如 在ht ml5的時代,...
Python帶你走進鍊錶的世界
a 1 2,3 4 for i in range len a print id a i if i len a 1 break print id a i 1 id a i 下面是最終的執行結果 140722440987280 32140722440987312 32140722440987344 32...
走進谷歌的秘密世界
1998年,美國史丹福大學的兩位博士生拉里 佩奇和謝爾蓋 布林興辦了一家公司,目標是要 整合全球規模的資訊,使人人皆可拜訪並從中受害 11年後,該公司的市值高達1720億美元,天天具有10億使用者,知足天天超越10億次的搜刮需求。這就是鼎鼎台甫的谷歌搜刮。1999年,在谷歌剛成立1年之際,道格拉斯 ...