走進Python世界(10) 函式的引數

2021-07-26 09:14:35 字數 1671 閱讀 3223

定義函式的時候,我們把引數的名字和位置確定下來,函式的介面定義就完成了。對於函式的呼叫者來說,只需要知道如何傳遞正確的引數,以及函式將返回什麼樣的值就夠了,函式內部的複雜邏輯被封裝起來,呼叫者無需了解。

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年之際,道格拉斯 ...