zoukankan      html  css  js  c++  java
  • 面试题1

    def multipliers():
        return [lambda x:i*x for i in range(4)]
    print([m(2) for m in multipliers()])

    解释:

    for m in multipliers() 这条语句到底干了什么?其实它干的事情只有一个,那就是遍历了函数multipliers()返回的列表,在遍历列表的同时把每个匿名函数赋值给了m,把它拆分来看就是这样:
    m = lambda x:i*x
    m = lambda x:i*x
    m = lambda x:i*x
    m = lambda x:i*x
    并且每次都执行了一次 m(2),也就是每次都调用了一下匿名函数,注意:此时此刻匿名函数才真正被调用了,然后它会引用外层命名空间的变量i,那么此时i的值是多少呢? 
    因为for i in range(4)这个for循环已经执行完毕,i的值等于3,所以每次当执行m(2)时,i的值都等于3
    
    所以每次调用m(2)的结果都是6
    最终输出结果为[6, 6, 6, 6]
  • 相关阅读:
    C open fopen read fread
    图像混合模式算法
    高级API和低级API
    strcpy_s与strcpy
    IsPowerOfTwo
    透明度算法
    POJ 2240(bellman_ford)
    POJ 1797(dijkstra)
    【转载】POJ 图论题目列表
    POJ 1502(Floyd)
  • 原文地址:https://www.cnblogs.com/baicai37/p/12943837.html
Copyright © 2011-2022 走看看