0. 匿名函数
- 概念:
lambda函数
,指没有名字
的函数 - 形式:
1. 格式:lambda 参数1, 参数2, ...: 表达式 2. 限制: (1) 只能写一个表达式,不能直接return (2) 表达式的结果就是返回值 (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. 在函数嵌套的前提下 2. 内层函数引用了外层函数的变量(包括参数) 3. 外层函数,又把内层函数当做返回值进行返回 4. 内层函数 + 所引用的外层变量,称为闭包
- 形式
def outside(a): b = 10 def inner(): print(a) print(b) return inner result = outside(10) result()
- 场景
# 外层函数,根据不同的参数,来生成不同作用功能的函数 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 声明变量; 否则当做是闭包内, 新定义的变量 def demo(): num = 66 def inner(): nonlocal num num = 88 print(num) print(num) return inner result = demo() result() 2. 值捕获 (1) 闭包在 "其被定义的上下文中" 捕获变量; (2) 即使定义这些变量的 "原作用域已经不存在"; (3) 闭包仍然可以在 "被调用时" "引用和修改这些值" 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]()
网友评论