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 23 Python
浅谈python字符串方法的简单使用
Jul 18 Python
简单谈谈Python中的几种常见的数据类型
Feb 10 Python
安装Python的教程-Windows
Jul 22 Python
Python调用系统底层API播放wav文件的方法
Aug 11 Python
python执行使用shell命令方法分享
Nov 08 Python
python实现协同过滤推荐算法完整代码示例
Dec 15 Python
TensorFlow用expand_dim()来增加维度的方法
Jul 26 Python
python操作excel的方法
Aug 16 Python
Python字符串内置函数功能与用法总结
Apr 16 Python
如何获取Python简单for循环索引
Nov 21 Python
Python依赖包迁移到断网环境操作
Jul 13 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体系结构的分析
2013/05/02 PHP
PHP防盗链代码实例
2014/08/27 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
2018/08/21 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
jquery获得同源iframe内body下标签的值的方法
2014/09/25 Javascript
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
angular2中使用第三方js库的实例
2018/02/26 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
浅谈Fetch 数据交互方式
2018/12/20 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
在vue中实现嵌套页面(iframe)
2020/07/30 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
微信小程序onShareTimeline()实现分享朋友圈
2021/01/07 Javascript
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
Python入门之三角函数tan()函数实例详解
2017/11/08 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
奥斯汀独木舟和皮划艇:Austin Canoe & Kayak
2018/05/22 全球购物
法学专业个人求职信
2013/09/26 职场文书
计算机本科生自荐信
2013/10/15 职场文书
员工评语大全
2014/01/19 职场文书
腾讯广告词
2014/03/19 职场文书
付款承诺函范文
2015/01/21 职场文书
教师远程培训心得体会
2016/01/09 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书
导游词之云南丽江古城
2019/09/17 职场文书
Python基本知识点总结
2022/04/07 Python