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发送邮件接收邮件示例分享
Jan 21 Python
用Python中的wxPython实现最基本的浏览器功能
Apr 14 Python
举例讲解Python中的算数运算符的用法
May 13 Python
Python模拟登录验证码(代码简单)
Feb 06 Python
Python OpenCV实现图片上输出中文
Jan 22 Python
pandas每次多Sheet写入文件的方法
Dec 10 Python
对Python的多进程锁的使用方法详解
Feb 18 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
May 05 Python
python datetime时间格式的相互转换问题
Jun 11 Python
python利用os模块编写文件复制功能——copy()函数用法
Jul 13 Python
Python map及filter函数使用方法解析
Aug 06 Python
python3.7 openpyxl 在excel单元格中写入数据实例
Sep 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
Mysql的GROUP_CONCAT()函数使用方法
2008/03/28 PHP
php下把数组保存为文件格式的实例应用
2010/02/08 PHP
PHP 图片水印类代码
2012/08/27 PHP
php增删改查示例自己写的demo
2013/09/04 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
javascript 控制弹出窗口
2007/04/10 Javascript
Add a Formatted Table to a Word Document
2007/06/15 Javascript
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
简单的网页广告特效实例
2017/08/19 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
Vue项目中使用flow做类型检测的方法
2020/03/18 Javascript
原生js实现自定义消息提示框
2020/11/19 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
通过python下载FTP上的文件夹的实现代码
2013/02/10 Python
在Python中使用base64模块处理字符编码的教程
2015/04/28 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
python GUI图形化编程wxpython的使用
2019/07/19 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
Python序列化pickle模块使用详解
2020/03/05 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
2019/07/09 HTML / CSS
竞聘演讲稿开场白
2014/08/25 职场文书
关于倡议书的范文
2015/04/29 职场文书
律师函格式范本
2015/05/27 职场文书
婚育证明样本
2015/06/16 职场文书
python自动化测试通过日志3分钟定位bug
2021/11/20 Python