zoukankan      html  css  js  c++  java
  • 一个Python引用引起的困惑

    (转载请注明原创于潘多拉盒子)

    先来看一段程序:
    funs = [lambda x: x**k for k in range(0, 4)]
    res = [f(2) for f in funs]
    print res
    结果是什么呢?
    结果是这样的:[8, 8, 8, 8],如果不感到意外,说明你已经理解了python,或者没看懂:)
    如果意外,请看下面的分析:
    实际上,[lambda x: x**k for k in range(0, 4)],创建了4个lambda表达式,每个表达式都是
    lambda x: x**k,而k最终是等于3。于是4个lambda表达式都是lambda x: x**3 !
    怎样才能根据不同的k生成不同的表达式呢?原因是要对k生成多个对象!!
    函数的参数是作为引用传入的,因此我们可以对lambda表达式增加一个参数,k:
    funs = [lambda x, k=k: x**k for k in range(0, 4)]
    重新运行程序,得到res的值为
    [1, 2, 4, 8]!
    神奇的python!
    如果你是一个python程序员,不清楚python的引用机制,你将时常困惑。

  • 相关阅读:
    审 讯 技巧
    带参数的多线程的方式
    通达信日线 数据格式
    visual studio 2012 update3
    单实例运行tz
    维特比算法
    Kooboo CMS的安装步骤
    年龄
    富文本编辑器---非常实用的
    printf 打印 unit32_t
  • 原文地址:https://www.cnblogs.com/bqzhao/p/2003330.html
Copyright © 2011-2022 走看看