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读取oracle函数返回值
Jul 18 Python
python机器学习理论与实战(二)决策树
Jan 19 Python
python购物车程序简单代码
Apr 18 Python
sublime python3 输入换行不结束的方法
Apr 19 Python
Python中交换两个元素的实现方法
Jun 29 Python
Django配置celery(非djcelery)执行异步任务和定时任务
Jul 16 Python
python矩阵的转置和逆转实例
Dec 12 Python
python实现简单加密解密机制
Mar 19 Python
Python实现的排列组合、破解密码算法示例
Apr 12 Python
python+pygame实现坦克大战
Sep 10 Python
python实现扫雷游戏的示例
Oct 20 Python
python基于爬虫+django,打造个性化API接口
Jan 21 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的数组与字符串的转换函数整理汇总
2013/07/18 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
js同时按下两个方向键
2007/12/01 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
js获取键盘按键响应事件(兼容各浏览器)
2013/05/16 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
vue.js开发环境安装教程
2017/03/17 Javascript
Vue.js 60分钟快速入门教程
2017/03/28 Javascript
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
babel的使用及安装配置教程
2018/02/22 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
2019/11/05 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
JS指定音频audio在某个时间点进行播放
2020/11/28 Javascript
[01:57]2018DOTA2亚洲邀请赛赛前采访-iG
2018/04/03 DOTA
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
python系列 文件操作的代码
2019/10/06 Python
Python SSL证书验证问题解决方案
2020/01/13 Python
python3 xpath和requests应用详解
2020/03/06 Python
python seaborn heatmap可视化相关性矩阵实例
2020/06/03 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
Python中pass的作用与使用教程
2020/11/13 Python
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
市场营销专业毕业生自荐信
2013/11/02 职场文书
知识竞赛活动方案
2014/02/18 职场文书
市级优秀班主任事迹材料
2014/05/13 职场文书
导游词之任弼时故居
2020/01/07 职场文书