(D10)Python-函式,lambda匿名函式
阿新 • • 發佈:2018-12-08
函式Function
函式變數
- 函式名是變數,他在建立函式時繫結一個函式
- 一個函式可以作用另一個函式的實參傳遞
- 可以吧一個函式傳遞給另一個函式,另一個函式的形參變數將繫結實參函式
示例1:
看懂如下程式碼,判斷結果 def myinput(fn): L = [1, 3, 9, 5, 7] return fn(L) print(myinput(max)) # 9 print(myinput(min)) # 1 print(myinput(sum)) # 25
函式的巢狀定義
- 函式巢狀定義是指一個函式理用def語句建立其他函式的情況
- Python的作用域:
- 作用域也叫名字空間 ,是訪問變數時查詢變數的名字範圍空間
- Python中的四個作用域:
作用域 | 英文解釋 | 英文解釋 |
---|---|---|
區域性作用域作用域 | Local | L |
外部巢狀作用域作用域 | Enclosing | E |
函式定義所在模組作用域 | Global | G |
Python內建模組作用域 | Builtin | B |
變數名查詢規則
- L—>E—>G—>B
- 在預設的情況下,變數名賦值會建立改變當前作用域內變數關係
Global 語句
- 作用:
- 告訴直譯器,global語句宣告一個或多個變數,這些變數的作用域為超級模組,也稱為全域性變數
- 全域性宣告(global) 將賦值語句的變數對映到模組檔案內部的作用域
- 語法:
- global 變數名1 , 變數名2 。。。。
- 說明:
- 全域性變數如果在函式內部被賦值則必須經過全域性繩命(否則會被認為是區域性變數)
- 全域性變數實在函式內部不經過宣告就可以直接訪問
- 不能先建立區域性變數,再用global宣告為全域性變數此種作法不符合規則
- global 變數列表裡的變數名不能出現在函式的形參列表裡
nonlocal語句
- 作用:
- 告訴直譯器,nonlocal宣告的變數不是區域性變數也不是全域性變數,而是外部巢狀函式的變數
- 語法:nonlocal 變數名1,變數名2
- 說明:
- nonlocal語句只能在被巢狀函式內部進行使用
- 對nonlocal變數進行賦值將對外部巢狀函式的作用域內的變數進行操作
- 當有兩層或以上函式巢狀時,訪問nonlocal變數只對最近的一層變數進行操作
- nonlocal 語句的變數列表裡的變數名不能出現在此函式的形參列表中
lambda匿名函式
- lambda表示式(又稱匿名函式)
- 作用:
- 建立一個匿名函式物件
- 同def類似,但不提供函式名
- 語法:
- lambda [函式形參列表]:表示式
- 說明:
- lambda 表示式建立的函式只能包含一條表示式
- lambda 比函式簡單,且可以隨時建立和銷燬,有利於降低程式耦合度
- 作用:
示例:
看懂下面的程式在做什麼?結果是什麼 ?
def fx(f, x, y):
print(f(x, y))
fx((lambda a, b: a + b), 100, 200)
fx((lambda x, y: x**y), 3, 4)
eval函式和exec函式
- eval(source, global=None, local=None), 把一個
字串source 當成一個表示式來執行,返回表示式執
行後的結果 - exec(source, global=None, local=None) 把一個
字串source當成程式來執行