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中的数据对象持久化存储模块pickle的使用示例
Mar 03 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
May 17 Python
Python生成随机密码的方法
Jun 16 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
Jul 11 Python
解决python xlrd无法读取excel文件的问题
Dec 25 Python
Django 静态文件配置过程详解
Jul 23 Python
在django admin中添加自定义视图的例子
Jul 26 Python
python实现while循环打印星星的四种形状
Nov 23 Python
Python递归调用实现数字累加的代码
Feb 25 Python
基于Python计算圆周率pi代码实例
Mar 25 Python
4行Python代码生成图像验证码(2种)
Apr 07 Python
python如何导入依赖包
Jul 13 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 preg_replace替换实例讲解
2013/11/04 PHP
Codeigniter实现多文件上传并创建多个缩略图
2014/06/12 PHP
JavaScript 中的事件教程
2007/04/05 Javascript
JQUERY 设置SELECT选中项代码
2014/02/07 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
JS简单判断函数是否存在的方法
2017/02/13 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
微信小程序自定义组件
2017/08/16 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
js中对象与对象创建方法的各种方法
2019/02/27 Javascript
详解小程序云开发攻略(解决最棘手的问题)
2019/09/30 Javascript
关于JSON解析的实现过程解析
2019/10/08 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
2020/08/25 Javascript
JS PHP字符串截取函数实现原理解析
2020/08/29 Javascript
javascript实现移动端轮播图
2020/12/09 Javascript
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python之文件的读写和文件目录以及文件夹的操作实现代码
2016/08/28 Python
使用Python3内置文档高效学习以及官方中文文档
2019/05/19 Python
Python3 全自动更新已安装的模块实现
2020/01/06 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
开发人员所需要知道的HTML5性能分析面面观
2012/07/05 HTML / CSS
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
法国票务网站:Ticketmaster法国
2018/07/09 全球购物
捷克多品牌在线时尚商店:ANSWEAR.cz
2020/10/03 全球购物
意大利在线药房:Saninforma
2021/02/11 全球购物
大学四年个人的自我评价
2014/02/26 职场文书
民生工程实施方案
2014/03/22 职场文书
综合素质自我评价怎么写
2014/09/14 职场文书
2014年精神文明建设工作总结
2014/11/19 职场文书
建筑安全员岗位职责
2015/02/15 职场文书
html+css实现文字折叠特效实例
2021/06/02 HTML / CSS
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python