0. 匿名函數(shù)
- 概念:
lambda函數(shù)
酌伊,指沒有名字
的函數(shù) - 形式:
1. 格式:lambda 參數(shù)1, 參數(shù)2, ...: 表達式 2. 限制: (1) 只能寫一個表達式番甩,不能直接return (2) 表達式的結(jié)果就是返回值 (3) 只適用于一些簡單的操作處理
- 場景
l = [{"name": "wxx", "age": 18}, {"name": "xdy", "age": 6}, {"name": "xfq", "age": 3}] result = sorted(l, key=lambda x: x["age"]) print(result)
1. 閉包
- 概念
1. 在函數(shù)嵌套的前提下 2. 內(nèi)層函數(shù)引用了外層函數(shù)的變量(包括參數(shù)) 3. 外層函數(shù),又把內(nèi)層函數(shù)當(dāng)做返回值進行返回 4. 內(nèi)層函數(shù) + 所引用的外層變量缅刽,稱為閉包
- 形式
def outside(a): b = 10 def inner(): print(a) print(b) return inner result = outside(10) result()
- 場景
# 外層函數(shù),根據(jù)不同的參數(shù),來生成不同作用功能的函數(shù) def line_config(content, length): def line(): print("-"*(length // 2) + content + "-"*(length // 2)) return line line1 = line_config("秦子陽", 40) line1() line2 = line_config("小清新", 80) line2()
- 注意
1. 閉包中, 若要修改引用的外層變量, 需要使用 nonlocal 聲明變量; 否則當(dāng)做是閉包內(nèi), 新定義的變量 def demo(): num = 66 def inner(): nonlocal num num = 88 print(num) print(num) return inner result = demo() result() 2. 值捕獲 (1) 閉包在 "其被定義的上下文中" 捕獲變量侧馅; (2) 即使定義這些變量的 "原作用域已經(jīng)不存在"仿畸; (3) 閉包仍然可以在 "被調(diào)用時" "引用和修改這些值" def test(): funcs = [] for i in range(1, 4): def test2(num): def inner(): print(num) return inner funcs.append(test2(i)) return funcs newFuncs = test() print(newFuncs) newFuncs[0]() newFuncs[1]() newFuncs[2]()