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中使用pngquant压缩png图片的教程
Apr 09 Python
快速实现基于Python的微信聊天机器人示例代码
Mar 03 Python
python利用MethodType绑定方法到类示例代码
Aug 27 Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 Python
python PyTorch预训练示例
Feb 11 Python
python pandas dataframe 行列选择,切片操作方法
Apr 10 Python
解决sublime+python3无法输出中文的问题
Dec 12 Python
python飞机大战pygame碰撞检测实现方法分析
Dec 17 Python
Python lambda表达式原理及用法解析
Aug 18 Python
python计算auc的方法
Sep 09 Python
python小技巧——将变量保存在本地及读取
Nov 13 Python
Python类class参数self原理解析
Nov 19 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用户指南-cookies部分
2006/10/09 PHP
PHP中file_get_contents高?用法实例
2014/09/24 PHP
详解php实现页面静态化原理
2017/06/21 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
2017/10/17 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
javascript中使用正则表达式清理table样式的代码
2020/04/01 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
2016/01/12 Javascript
纯js实现瀑布流布局及ajax动态新增数据
2016/04/07 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
2017/03/04 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
Echarts实现单条折线可拖拽效果
2019/12/19 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
python实现桌面气泡提示功能
2019/07/29 Python
python框架flask入门之路由及简单实现方法
2020/06/07 Python
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
C#笔试题集合
2013/06/21 面试题
高分子材料个人求职信范文
2013/09/25 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
亲子读书活动方案
2014/02/22 职场文书
环保建议书作文
2014/03/12 职场文书
预备党员承诺书
2014/03/25 职场文书
实习评语大全
2014/04/26 职场文书
竞选大队长演讲稿
2014/04/29 职场文书
小学生倡议书范文
2014/05/13 职场文书
维稳工作情况汇报
2014/10/27 职场文书
骨干教师事迹材料
2014/12/17 职场文书
教师个人年终总结
2015/02/11 职场文书
2015年预算员工作总结
2015/05/14 职场文书
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫