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设计模式之观察者模式实例
Apr 26 Python
wxPython窗口中文乱码解决方法
Oct 11 Python
Ubuntu下安装PyV8
Mar 13 Python
python爬虫使用cookie登录详解
Dec 27 Python
Django中使用celery完成异步任务的示例代码
Jan 23 Python
python多进程提取处理大量文本的关键词方法
Jun 05 Python
Django密码系统实现过程详解
Jul 19 Python
django执行数据库查询之后实现返回的结果集转json
Mar 31 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
Python常驻任务实现接收外界参数代码解析
Jul 21 Python
弄清Pytorch显存的分配机制
Dec 10 Python
OpenCV-Python使用cv2实现傅里叶变换
Jun 09 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
memcache一致性hash的php实现方法
2015/03/05 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
2019/05/29 PHP
php实现QQ小程序发送模板消息功能
2019/09/18 PHP
JavaScript对象、属性、事件手册集合方便查询
2010/07/04 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
js 走马灯简单实例
2013/11/21 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
jQuery判断一个元素是否可见的方法
2015/06/05 Javascript
全面解析标签页的切换方式
2016/08/21 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
Vue 实现把表单form数据 转化成json格式的数据
2019/10/29 Javascript
js实现Element中input组件的部分功能并封装成组件(实例代码)
2021/03/02 Javascript
[01:25]DOTA2超级联赛专访iG 将调整状态找回自己
2013/06/05 DOTA
Python标准库06之子进程 (subprocess包) 详解
2016/12/07 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
Python实现二叉树的最小深度的两种方法
2019/09/30 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
通过实例简单了解Python中yield的作用
2019/12/11 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
全球最大的瓷器、水晶和银器零售商:Replacements
2020/06/15 全球购物
小学教师的自我评价范例
2013/10/31 职场文书
化工专业应届生求职信
2013/11/08 职场文书
《学会待客》教学反思
2014/02/22 职场文书
资金主管岗位职责范本
2014/03/04 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
2014财务年度工作总结
2014/11/11 职场文书
小学生手册家长意见
2015/06/03 职场文书