Python基礎——匿名函式+作用域
一、匿名函式:lambda
函式名 = lambda 引數: 表示式
1、有名函式
def f2(a, b): return a + b print(f2(2, 4))# 6
2、匿名函式lambda
- [ ] 匿名函式想要自執行:函式名()
f2 = lambda a,b: a + b print(f2(2, 4))#6
- [ ] 函式名 = lambda 引數:表示式
li = [1, 4, 69, 378, 96] print(list(filter(lambda x: x > 80, li)))#[378, 96]
- [ ] 把lambda函式當做引數傳入,這樣可以實現不同方法
def f2(a, b, func): result = func(a, b) return result num1 = f2(99, 9, lambda x, y: x + y) num2 = f2(99, 9, lambda x, y: x - y) print(num1)# 108 print(num2)# 90
- [ ] 實現輸入函式的迴圈執行
def f2(a, b, func): result = func(a, b) return result while True: flag = input("還要繼續輸入嗎:yes or no ?") if flag == "yes": func = input("請輸入一個匿名函式:") func = eval(func)# eval讓輸入的字串去執行 num = f2(11, 33, func) print(num) else: print("結束執行") break
執行結果:

1
二、函式的作用域:變數的作用範圍
1、使用函式內部定義的變數
num = 100#全域性變數--全域性作用域 def f(): num = 200 print(num) f()# 200 print(num)# 100
2、註釋函式內部變數後,使用的是函式外定義的變數
num = 100 def f(): #num = 200#區域性變數,只在函式內生效,函式外無法拿到---區域性作用域 print(num) f()# 100
3、global函式:在函式內部定義全域性變數
- [ ] 使用global函式前:
num = 100#全域性變數——全域性作用域 def f1(): num = 200 print(num) f1()# 200 print(num)# 100
- [ ] 使用global函式後:
num = 100#全域性變數——全域性作用域 def f1(): global num# 修改全域性變數 num = 200 print(num) f1()# 200 print(num)# 200
4、nonlocal:若是函式套嵌,內層函式想拿到外層函式的值,則用到nonlocal
- [ ] 若返回的是:f2()
def f1(): num = 1 def f2(): nonlocal num num += 1 return num return f2() num = f1() print(num)# 2
- [ ] 若返回的是:f2
def f1(): num = 1 def f2(): nonlocal num num += 1 return num return f2 num = f1() print(num())# 2
5、總結
1、函式內部定義的變數是區域性變數,其作用域是區域性作用域,函式外無法呼叫
2、函式外定義的變數是全域性變數,其作用域為全域性作用域,如果你想要在函式內修改全域性變數,需要加“global 變數名”