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基于smtplib实现异步发送邮件服务
May 28 Python
python学习笔记之列表(list)与元组(tuple)详解
Nov 23 Python
pandas 将索引值相加的方法
Nov 15 Python
Django利用cookie保存用户登录信息的简单实现方法
May 27 Python
python sklearn库实现简单逻辑回归的实例代码
Jul 01 Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 Python
深入了解Django View(视图系统)
Jul 23 Python
Tensorflow进行多维矩阵的拆分与拼接实例
Feb 07 Python
使用keras时input_shape的维度表示问题说明
Jun 29 Python
python爬取代理IP并进行有效的IP测试实现
Oct 09 Python
Jupyter Notebook安装及使用方法解析
Nov 12 Python
python 日志模块logging的使用场景及示例
Jan 04 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 获取远程网页内容的函数
2009/09/08 PHP
PHP中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
PHP中模糊查询并关联三个select框
2017/06/19 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
JavaScript对象模型-执行模型
2008/04/28 Javascript
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
jQuery 1.5最新版本的改进细节分析
2011/01/19 Javascript
JavaScript中的关键字"VAR"使用详解 分享
2013/07/31 Javascript
js比较日期大小的方法
2015/05/12 Javascript
jQuery实现对象转为url参数的方法
2017/01/11 Javascript
Node.js 基础教程之全局对象
2017/08/06 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
js实现按钮开关单机下拉菜单效果
2018/11/22 Javascript
JS原生瀑布流效果实现
2019/04/26 Javascript
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
python实现word 2007文档转换为pdf文件
2018/03/15 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
Python实现给PDF添加水印的方法
2021/01/25 Python
APM Monaco中国官网:来自摩纳哥珠宝品牌
2017/12/27 全球购物
高校自主招生自荐信
2013/12/09 职场文书
手机业务员岗位职责
2013/12/13 职场文书
通信研究生自荐信
2014/02/01 职场文书
《猫》教学反思
2014/02/26 职场文书
餐饮总经理岗位职责
2014/03/07 职场文书
共产党员承诺书
2014/03/25 职场文书
敬老模范事迹
2014/05/21 职场文书
体育系毕业生自荐信
2014/06/28 职场文书
追悼会答谢词
2015/01/05 职场文书
拖欠货款起诉状
2015/05/20 职场文书
Python基于Tkinter开发一个爬取B站直播弹幕的工具
2021/05/06 Python
JS实现扫雷项目总结
2021/05/19 Javascript
Golang Web 框架Iris安装部署
2022/08/14 Python