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使用functools模块中的partial函数生成偏函数
Jul 02 Python
Python学习之Django的管理界面代码示例
Feb 10 Python
Python 绘制酷炫的三维图步骤详解
Jul 12 Python
django 通过url实现简单的权限控制的例子
Aug 16 Python
详解如何用python实现一个简单下载器的服务端和客户端
Oct 28 Python
python中dict()的高级用法实现
Nov 13 Python
python list数据等间隔抽取并新建list存储的例子
Nov 27 Python
PyTorch加载自己的数据集实例详解
Mar 18 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
Apr 01 Python
django在开发中取消外键约束的实现
May 20 Python
详解python metaclass(元类)
Aug 13 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
Sep 24 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中session_unset与session_destroy的区别分析
2011/06/16 PHP
详解PHP中strlen和mb_strlen函数的区别
2014/03/07 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
2020/06/02 PHP
JavaScript中的Array对象使用说明
2011/01/17 Javascript
基于jquery的$.ajax async使用
2011/10/19 Javascript
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
jquery中object对象循环遍历的方法
2015/12/18 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
Google 地图API Map()构造器详解
2016/08/06 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
2016/12/08 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
Angular项目中$scope.$apply()方法的使用详解
2017/07/26 Javascript
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
2019/03/28 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
python三元运算符实现方法
2013/12/17 Python
Python操作列表之List.insert()方法的使用
2015/05/20 Python
python 实现自动远程登陆scp文件实例代码
2017/03/13 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
Pytorch中膨胀卷积的用法详解
2020/01/07 Python
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
下述程序的作用是计算机数组中的最大元素值及其下标
2012/11/26 面试题
非功能性需求都包括哪些方面
2013/10/29 面试题
综合内勤岗位职责
2014/04/14 职场文书
业绩倒数第一的检讨书
2014/09/24 职场文书
西岭雪山导游词
2015/02/06 职场文书
导游词之青岛崂山
2019/12/27 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python