函式設計原則:
函式有多種方法獲得輸入產生輸出,一般使用引數作為輸入,return語句配合可變引數的改變作為輸出。
函式輸入:
函式輸出:
def
fun(args):
return
def語句
def建立了乙個函式物件並將其賦值給乙個變數。def語句是實時執行的,在模組匯入時執行或者在互動模式下輸入時執行。
始終記住:函式是乙個物件,就像數字、字串一樣。除了函式呼叫外,還可以dir檢視函式物件的屬性。
return語句:函式結果作為呼叫表示式的值,如果沒有return語句,函式返回none。
呼叫:
fun
()
在函式名後增加()可以呼叫函式。引數是通過賦值傳遞的。
lambda表示式:建立乙個函式物件並將其作為結果返回。
lambda argu1, argu2, argun : expression using argus
lambda表示式中可以使用預設引數。
lambda表示式可以實現的函式完全可以用def實現,但是由於lambda是表示式而非語句,可以用在def不適用的地方,比如作為乙個列表的元素。另一方面,lambda表示式的主體是個表示式而非**塊,所以只能編寫簡單函式。示例:
>>>key = 'got'
>>>[key]()
8
使用lambda表示式的幾種特殊案例:
import sys
showall = lambda x:map(sys.stdout.write, x)
t = showall(['spam\n', 'eggs\n'])
showall = lambda x: [sys.stdout.write(line) for line in x]
t = showall(['spam\n', 'eggs\n'])
在呼叫函式時,需要向函式傳遞引數。引數的傳遞是以賦值的形式實現的,遵循賦值操作的約束。
python中關於引數需要著重介紹的概念是引數匹配模型。引數會出現在兩個地方:函式頭部的引數以及呼叫時傳入的引數,分別稱為形參和實參。
函式:
函式頭部引數必須以此順序出現:一般引數,預設引數,*name,
**name
呼叫者:
函式呼叫中,引數必須以此順序出現:位置引數,關鍵字引數,*seq,
**dict
引數匹配步驟:
當所有的匹配都完成後,通過賦值操作實現傳參。
本地變數:在def內的函式中是可見的,並且僅在函式呼叫時存在,在函式退出時消失。
global:宣告模組級的變數
對於線性迭代,一般使用迴圈結構而不用遞迴,因為前者簡單並且高效;但是對於需要遍歷任意形狀結構的情況,迴圈不再適用,這個時候需要使用遞迴。
生成器函式
yield表示式替代常規函式中的return語句,用於定義生成器函式,呼叫時返回乙個迭代器物件,該物件支援next()方法,可以開始這個函式或者從上次yield值後的地方恢復。
以常規的def語句編寫,但是使用yield語句一次返回乙個結果。這樣僅在需要的時候才產生結果,而不是立即產生所有結果。
def
gensquares
(n):
for i in range(n):
yiled i ** 2
x = gensquares(4)
next(x)-->0
next(x)-->1
next(x)-->4
next(x)-->9
next(x)-->stopiteration
生成器在記憶體使用和效能方面都比常規函式更好,尤其在結果列表很大時,這一點尤其有用。
生成器表示式
和列表解析式非常類似,區別在於用()而非括起來。生成器表示式返回乙個生成器物件,支援迭代協議,可以使用所有的迭代工具。
生成器本身就是迭代器,和檔案物件相同。
python基礎 函式
def funcname params return value 如果沒有return 最後會返回none,如果只寫return 會返回none 返回值個數為乙個,但是可以返回tuple,表面上返回多個值 def f1 return x,y x,y f1 def nop passdef functe...
Python 函式基礎
定義 函式是指將一組語句的集合通過乙個名字 函式名 封裝起來,要想執行這個函式,只需呼叫其函式名即可 為什麼使用函式 減少重複 使程式變的可擴充套件使程式變得易維護 1 定義乙個函式 2def func 使用def關鍵字定義函式 接函式名,括號內可以傳遞引數 3print hello world 函...
python基礎 函式
在程式設計過程中可以定義自己想要實現的功能的函式,語法如下 def 函式名 引數列表 函式名可以隨意編寫,但最好不要與內建函式重複,不然內建函式將被替換成你所定義的函式 函式體例 def f a,b,c,d return a,b,c,d c f 1,2,3,4 print c c,d,x,y f 1...