Python新手如何进行闭包时绑定变量操作


Posted in Python onMay 29, 2020

搞不清楚在闭包(closures)中Python是怎样绑定变量的

看这个例子:

>>> def create_multipliers():
...   return [lambda x : i * x for i in range(5)]
>>> for multiplier in create_multipliers():
...   print multiplier(2)
...

期望得到下面的输出:

0

2

4

6

8

但是实际上得到的是:

8

8

8

8

8

实例扩展:

# coding=utf-8
__author__ = 'xiaofu'

# 解释参考 http://docs.python-guide.org/en/latest/writing/gotchas/#late-binding-closures

def closure_test1():
  """
  每个closure的输出都是同一个i值
  :return:
  """
  closures = []
  for i in range(4):
    
    def closure():
      print("id of i: {}, value: {} ".format(id(i), i))

    closures.append(closure)

  # Python's closures are late binding.
  # This means that the values of variables used in closures are looked up at the time the inner function is called.

  for c in closures:
    c()

def closure_test2():

  def make_closure(i):

    def closure():
      print("id of i: {}, value: {} ".format(id(i), i))

    return closure

  closures = []

  for i in range(4):
    closures.append(make_closure(i))

  for c in closures:
    c()


if __name__ == '__main__':
  closure_test1()
  closure_test2()

输出:

id of i: 10437280, value: 3 
id of i: 10437280, value: 3 
id of i: 10437280, value: 3 
id of i: 10437280, value: 3 
id of i: 10437184, value: 0 
id of i: 10437216, value: 1 
id of i: 10437248, value: 2 
id of i: 10437280, value: 3

到此这篇关于Python新手如何进行闭包时绑定变量操作的文章就介绍到这了,更多相关Python闭包时绑定变量实例内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python optparse模块使用实例
Apr 09 Python
复习Python中的字符串知识点
Apr 14 Python
python中实现迭代器(iterator)的方法示例
Jan 19 Python
Python学习小技巧之列表项的推导式与过滤操作
May 20 Python
Python常用字符串替换函数strip、replace及sub用法示例
May 21 Python
python Flask 装饰器顺序问题解决
Aug 08 Python
对Python 获取类的成员变量及临时变量的方法详解
Jan 22 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
Python同时迭代多个序列的方法
Jul 28 Python
使用pytorch实现线性回归
Apr 11 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
Apr 11 Python
python实现双向链表原理
May 25 Python
如何理解python中数字列表
May 29 #Python
Django实现前台上传并显示图片功能
May 29 #Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
May 29 #Python
Django实现后台上传并显示图片功能
May 29 #Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
May 29 #Python
Python基于smtplib模块发送邮件代码实例
May 29 #Python
Django通过json格式收集主机信息
May 29 #Python
You might like
PHP删除目录及目录下所有文件的方法详解
2013/06/06 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
jQuery 白痴级入门教程
2009/11/11 Javascript
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
2013/01/24 Javascript
JS中Iframe之间传值的方法
2013/03/11 Javascript
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
JavaScript中的undefined学习总结
2013/11/30 Javascript
纯js写的分页表格数据为json串
2014/02/18 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
JavaScript中this详解
2015/09/01 Javascript
JavaScript中eval函数的问题
2016/01/31 Javascript
ionic js 模型 $ionicModal 可以遮住用户主界面的内容框
2016/06/06 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
webpack4 处理SCSS的方法示例
2018/09/03 Javascript
[01:07]2015国际邀请赛 中国区预选赛精彩回顾
2015/06/15 DOTA
[01:51]DAC趣味视频-如何成为职业选手.mp4
2017/04/02 DOTA
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
python下MySQLdb用法实例分析
2015/06/08 Python
Python面向对象之继承代码详解
2018/01/29 Python
python文件拆分与重组实例
2018/12/10 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
在python中使用with打开多个文件的方法
2019/01/07 Python
对python周期性定时器的示例详解
2019/02/19 Python
使用python打印十行杨辉三角过程详解
2019/07/10 Python
Python实现二叉树的最小深度的两种方法
2019/09/30 Python
高中生的学习总结自我鉴定
2013/10/26 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
《学会生存》读后感3篇
2019/12/09 职场文书
JavaScript实现简单计时器
2021/06/22 Javascript
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android