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)

 

posted @ 2021-07-14 10:44  error015  阅读(66)  评论(0)    收藏  举报