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网络编程学习笔记(10):webpy框架
Jun 09 Python
python模块简介之有序字典(OrderedDict)
Dec 01 Python
itchat和matplotlib的结合使用爬取微信信息的实例
Aug 25 Python
python进程管理工具supervisor的安装与使用教程
Sep 05 Python
Python实现矩阵加法和乘法的方法分析
Dec 19 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
Oct 23 Python
使用python进行广告点击率的预测的实现
Jul 04 Python
Django shell调试models输出的SQL语句方法
Aug 29 Python
Python Numpy库常见用法入门教程
Jan 16 Python
pycharm解决关闭flask后依旧可以访问服务的问题
Apr 03 Python
在Keras中CNN联合LSTM进行分类实例
Jun 29 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
Jul 01 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
德劲1103的维修打理经验
2021/03/02 无线电
利用PHP实现与ASP Banner组件相似的类
2006/10/09 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
永不消失的title提示代码
2007/02/15 Javascript
用apply让javascript函数仅执行一次的代码
2010/06/27 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
2015/04/13 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
js基于setTimeout与setInterval实现多线程
2016/06/17 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
JavaScript原生数组Array常用方法
2017/04/06 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
python多线程抓取天涯帖子内容示例
2014/04/03 Python
python查询sqlite数据表的方法
2015/05/08 Python
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
Python实现导出数据生成excel报表的方法示例
2017/07/12 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
Python实现端口检测的方法
2018/07/24 Python
在python中实现对list求和及求积
2018/11/14 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
python简单实现插入排序实例代码
2020/12/16 Python
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
Timberland法国官网:购买靴子、鞋子、衣服、夹克和配饰
2019/11/30 全球购物
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
优秀团员个人事迹材料
2014/01/29 职场文书
体育活动总结范文
2014/05/04 职场文书
大学团日活动新闻稿
2014/09/10 职场文书
颐和园导游词
2015/01/30 职场文书
杨善洲观后感
2015/06/04 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers
Promise面试题详解之控制并发
2021/05/14 面试题
教你利用python实现企业微信发送消息
2021/05/23 Python
分享Python获取本机IP地址的几种方法
2022/03/17 Python
Python函数对象与闭包函数
2022/04/13 Python