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装饰器使用示例及实际应用例子
Mar 06 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
Mar 12 Python
利用python获取当前日期前后N天或N月日期的方法示例
Jul 30 Python
使用Python实现博客上进行自动翻页
Aug 23 Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
Nov 01 Python
python spyder中读取txt为图片的方法
Apr 27 Python
python设置随机种子实例讲解
Sep 12 Python
Django项目基础配置和基本使用过程解析
Nov 25 Python
使用Keras建立模型并训练等一系列操作方式
Jul 02 Python
写一个Python脚本自动爬取Bilibili小视频
Apr 24 Python
Python实现的扫码工具居然这么好用!
Jun 07 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实现斐波那契数列的简单写法
2014/07/19 PHP
PHP基本语法实例总结
2016/09/09 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
javascript 写类方式之六
2009/07/05 Javascript
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
2013/03/18 Javascript
javascript创建数组之联合数组的使用方法示例
2013/12/26 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
2017/09/11 Javascript
React组件refs的使用详解
2018/02/09 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
使用Vue实现调用接口加载页面初始数据
2019/10/28 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
Python教程之全局变量用法
2016/06/27 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
Django项目中添加ldap登陆认证功能的实现
2019/04/04 Python
matplotlib制作雷达图报错ValueError的实现
2021/01/05 Python
澳洲的服装老品牌:SABA
2018/02/06 全球购物
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
英国手机零售商:Metrofone
2019/03/18 全球购物
吉列剃须刀英国官网:Gillette英国
2019/03/28 全球购物
写自荐信的七个技巧
2013/10/15 职场文书
个人找工作求职简历的自我评价
2013/10/20 职场文书
关于安全的演讲稿
2014/05/09 职场文书
2014年政协委员工作总结
2014/12/01 职场文书
大学生党性分析材料
2014/12/19 职场文书
廉洁自律证明
2015/06/24 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
关于销售人员的年终工作总结要点
2019/08/15 职场文书
2019年学校消防安全责任书(2篇)
2019/10/09 职场文书