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 相关文章推荐
Python3.x和Python2.x的区别介绍
Feb 12 Python
python爬取亚马逊书籍信息代码分享
Dec 09 Python
python3+PyQt5实现自定义窗口部件Counters
Apr 20 Python
利用Python如何批量更新服务器文件
Jul 29 Python
详解django自定义中间件处理
Nov 21 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
Dec 29 Python
Python API 自动化实战详解(纯代码)
Jun 11 Python
使用Python画股票的K线图的方法步骤
Jun 28 Python
Python 多个图同时在不同窗口显示的实现方法
Jul 07 Python
用Python调用win命令行提高工作效率的实例
Aug 14 Python
python3的url编码和解码,自定义gbk、utf-8的例子
Aug 22 Python
Python程序慢的重要原因
Sep 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
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
php下使用无限生命期Session的方法
2007/03/16 PHP
PHP 之 写时复制介绍(Copy On Write)
2014/05/13 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
使用YUI+Ant 实现JS CSS压缩
2014/09/02 PHP
PHP类的自动加载机制实现方法分析
2019/01/10 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
PHP利用DWZ.CN服务生成短网址
2019/08/11 PHP
[原创]来自ImageSee官方 JavaScript图片浏览器
2008/01/16 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
javascript每日必学之运算符
2016/02/16 Javascript
js添加千分位的实现代码(超简单)
2016/08/01 Javascript
前端js实现文件的断点续传 后端PHP文件接收
2016/10/14 Javascript
Bootstrap模态框案例解析
2017/03/05 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
[01:12]DOTA2次级职业联赛 - Newbee.Y 战队宣传片
2014/12/01 DOTA
Python中使用PIPE操作Linux管道
2015/02/04 Python
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
pycharm修改界面主题颜色的方法
2019/01/17 Python
python利用tkinter实现屏保
2019/07/30 Python
Android本地应用打开方法——通过html5写连接
2016/03/11 HTML / CSS
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
JD Sports荷兰:英国领先的运动时尚零售商
2020/03/13 全球购物
入党自我鉴定范文
2013/10/04 职场文书
日化店促销方案
2014/03/26 职场文书
商业门面租房协议书
2014/11/25 职场文书
2014年幼儿园保育工作总结
2014/12/02 职场文书
雾霾停课通知
2015/04/24 职场文书
matplotlib画混淆矩阵与正确率曲线的实例代码
2021/06/01 Python
Python与C++中梯度方向直方图的实现
2022/03/17 Python
Python first-order-model实现让照片动起来
2022/06/25 Python
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL