Python3.8_特殊题
def func(): return [lambda x: i * x for i in range(4)] res = [m(2) for m in func()] print(res)
# 运行结果
[6, 6, 6, 6]
如果项目中有同事这样写,感觉需要考虑被打的风险~
代码拆解:
拆解前需要先了解一下闭包、lambda、列表推导式的使用
解析:上题实际是闭包、lambda、列表推导式、作用域的综合应用
闭包:Python 中通俗一点来说,如果在一个函数内部,嵌套了函数,这个内部函数对(非全局作用域)外部作用域的变量进行引用,那么这个内部函数称为闭包。闭包每次运行是能记住引用的外部作用域的变量的值。
lambda:匿名函数,返回结果为函数
1、闭包示例:
def func(): for i in range(4): def func2(x): return x * i return func2 res = func() print(res(1))
2、拆解原始代码:
def func(): lst = [] for i in range(4): def func2(x): return x * i lst.append(func2) return func2 res = [m(2) for m in func()] print(res)
以上仅个人观点,仅供参考,如需转载,请标明出处!!!!

浙公网安备 33010602011771号