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通过解析网页实现看报程序的方法
Aug 04 Python
python字符串排序方法
Aug 29 Python
Python的Django中将文件上传至七牛云存储的代码分享
Jun 03 Python
如何用Python合并lmdb文件
Jul 02 Python
Django 视图层(view)的使用
Nov 09 Python
django 类视图的使用方法详解
Jul 24 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
Jan 08 Python
python判断是空的实例分享
Jul 06 Python
selenium3.0+python之环境搭建的方法步骤
Feb 01 Python
python解包用法详解
Feb 17 Python
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
Apr 14 Python
如何基于python实现单目三维重建详解
Jun 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/01/06 PHP
PHP微信开发之微信录音临时转永久存储
2018/01/26 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
SwfUpload在IE10上不出现上传按钮的解决方法
2013/06/25 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
2013/12/02 Javascript
JQuery+Ajax无刷新分页的实例代码
2014/02/08 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
BootStrap智能表单实战系列(七)验证的支持
2016/06/13 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
2016/08/05 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
2018/05/11 Javascript
微信小程序实现跑马灯效果完整代码(附效果图)
2018/05/30 Javascript
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
使用RxJS更优雅地进行定时请求详析
2019/06/02 Javascript
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
Flask解决跨域的问题示例代码
2018/02/12 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
巴西手表购物网站:eclock
2019/03/19 全球购物
师范生自荐信范文
2013/10/06 职场文书
高校辅导员推荐信范文
2013/12/25 职场文书
应用化学专业职业生涯规划书
2014/01/22 职场文书
国贸专业的职业规划范文
2014/01/23 职场文书
工厂搬迁方案
2014/05/11 职场文书