阅读一下代码他们的输出结果是什么?

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

正确答案是[9,9,9,9],而不是[0,3,6,9]
产生的原因是Python的闭包的后期绑定导致的,这意味着在闭包中的变量是在内部函数被调用的时候被查找的,因为,最后函数被调用的时候,for循环已经完成, i 的值最后是3,因此每一个返回值的i都是3,所以最后的结果是[9,9,9,9]

上面的解释是我在网上找到的,我还不是特别的理解,我觉得是最后的推导式中是4个对同一个匿名函数的引用,函数的i修改只会以最后一个为准
也不知道这种理解对不对,如果你有更好的解释,恳请留言讲解!!!
也不知道这种理解对不对,如果你有更好的解释,恳请留言讲解!!!
也不知道这种理解对不对,如果你有更好的解释,恳请留言讲解!!!

Python的闭包的后期绑定问题相关推荐

  1. python闭包的延迟绑定_浅析Python的闭包和延迟绑定

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

  2. python中闭包不是立刻执行_一道神奇的Python面试题,你会吗?

    无意间,看到这么一道Python面试题:以下代码将输出什么? def testFun(): temp = [lambda x : i*x for i in range(4)] return temp ...

  3. 【C++】多态(早期绑定、后期绑定)、抽象类(纯虚函数)、虚析构函数

    我们都知道面向对象编程的三大特征是封装.继承.多态,今天我们就来说一下其中之一的多态. 概念: 多态: 多态字面意思就是多种形态,C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同 ...

  4. 使用Python,OpenCV进行Tesseract-OCR绑定及识别

    使用Python,OpenCV进行Tesseract-OCR绑定及识别 1. 效果图 2. 安装Tesseract+Python"绑定"及识别 3. 源码 参考 上一篇博客介绍了W ...

  5. 学习C#中调用COM,后期绑定(以及对WinHttp COM对象的C#封装)

    学习C#中调用COM,后期绑定(以及对WinHttp COM对象的C#封装) 学习C#中调用COM,后期绑定全部代码 开始学习C#了,没打算从语法一点一点的看起!所以上来就直接开始代码了!同时也和De ...

  6. python的闭包函数

    python的闭包 首先python闭包的作用,一个是自带作用域,另一个是延迟计算. 闭包是装饰器的基础. 闭包的基本形式: -------------------------- def 外部函数名( ...

  7. 前期绑定 vs 后期绑定

    即:变量的类型,在编译时就能够确定的就是前期绑定:变量的类型,在编译时无法准确确定,只有在运行时才能确定的变量类型,就是后期绑定. 转载于:https://www.cnblogs.com/JAVA-S ...

  8. C#前期绑定和后期绑定操作Excel-------实现简单打印功能

    1,前期绑定 前期绑定需要引用Microsoft.Office.Interop.Excel.dll,代码有提示功能,编写方便,且代码量小.但是和具体的office版本密切相关,不同版本的Excel可能 ...

  9. php 后期绑定,PHP __DIR__评估运行时(后期绑定)?

    是否有可能获得PHP文件的位置,在运行时进行评估?我正在寻找类似于魔术常量__DIR__的东西,但在运行时进行评估,作为后期绑定.与自我和静态相似的区别: __DIR__ ~ self ??? ~ s ...

最新文章

  1. 基于Vuejs+ElementUI的答案录入功能的一些总结
  2. wxWidgets:编写一个应用程序 - 添加一个按钮
  3. mysql数据库的事物日志在哪里_mysql数据库中事务日志的作用
  4. Know more about Cache Buffer Handle
  5. java基础 最重要的部分_Java基础(1)最基础的部分
  6. oracle11 处理器数,11G AWR中%Total CPU与%Busy CPU指标的疑问
  7. Js中fetch方法
  8. Chrome 实现前端页面自动刷新
  9. HDOJ 1755 - A Number Puzzle 排列数字凑同余,状态压缩DP
  10. udp广播收到重复包
  11. Vue设置页面的title
  12. jquery 获取 选中的radio的值
  13. IOS+Android 车牌识别SDK开发包——可以各种角度瞬间OCR识别车牌牌号
  14. Android中OKHttp的基本用法(Get、Post、上传文件等)
  15. FFMPEG+SDL播放音频流
  16. HTML初心自学记录(四)列表超链接
  17. 编写sdk提供给第三方使用(比如接口请求类)
  18. CorelDRAW 2020Mac、2021mac 版本正式回归 macOS免激活版
  19. c语言fread()函数
  20. 复盘--写在秋招之后

热门文章

  1. Python连接mysql基本操作
  2. 【转】Word 2010 取消拼写/语法检查,隐藏红线/绿线
  3. mac下配置android sdk环境 安装eclipse
  4. EBGP邻居抖动问题
  5. Linux+Tomcat建站笔记(JDK,Mysql,Vsftpd,Iptables等配置)
  6. Internet路由结构学习心得二:通告汇聚和具体路由影响AS入流量
  7. 使用cisco 2500路由器实现ADSL接入
  8. 无盘XP系统全套安装说明
  9. Fedora/RedHat安装Mysql8.0
  10. Fedora/RedHat上搭建MariaDB