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提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
一些Python中的二维数组的操作方法
May 02 Python
Python新手们容易犯的几个错误总结
Apr 01 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 Python
Python中利用xpath解析HTML的方法
May 14 Python
Python中pandas模块DataFrame创建方法示例
Jun 20 Python
python 实现得到当前时间偏移day天后的日期方法
Dec 31 Python
Django QuerySet查询集原理及代码实例
Jun 13 Python
django models里数据表插入数据id自增操作
Jul 15 Python
Python之字符串的遍历的4种方式
Dec 08 Python
python 用pandas实现数据透视表功能
Dec 21 Python
pytorch查看网络参数显存占用量等操作
May 12 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
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
javascript 表单的友好用户体现
2009/01/07 Javascript
过虑特殊字符输入的js代码
2010/08/05 Javascript
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
两个listbox实现选项的添加删除和搜索
2013/03/01 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
Vue实现双向数据绑定
2017/05/03 Javascript
jQuery实现web页面樱花坠落的特效
2017/06/01 jQuery
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
2018/10/18 Javascript
vue实现扫码功能
2020/01/17 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
[04:03]辉夜杯主赛事 12月25日RECAP精彩回顾
2015/12/26 DOTA
python实现的文件夹清理程序分享
2014/11/22 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
2015/05/05 Python
python简单获取数组元素个数的方法
2015/07/13 Python
解决已经安装requests,却依然提示No module named requests问题
2018/05/18 Python
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
windows上安装python3教程以及环境变量配置详解
2019/07/18 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
运动服饰每月订阅盒:Ellie
2018/04/29 全球购物
MAC彩妆澳洲官网:M·A·C AU
2021/01/17 全球购物
工程造价专业大专生求职信
2013/10/06 职场文书
高二物理教学反思
2014/02/08 职场文书
《中华少年》教学反思
2014/02/15 职场文书
人力管理专业毕业生求职信
2014/02/27 职场文书
大学生活动总结怎么写
2014/04/29 职场文书
全国文明单位申报材料
2014/05/31 职场文书
公安领导班子四风问题个人整改措施思想汇报
2014/10/09 职场文书
农民工工资承诺书大全
2015/05/04 职场文书
Redis如何一键部署脚本
2021/04/12 Redis
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript