Python闭包执行时值的传递方式实例分析


Posted in Python onJune 04, 2018

本文实例分析了Python闭包执行时值的传递方式。分享给大家供大家参考,具体如下:

代码中有问题和问题的解释。

#!/usr/bin/python
#coding: utf-8
# 判断一个人是否及格,如果满分150,则90及格,如果满分100,则60及格
# 开始的疑惑:当fun函数执行完以后,对应的val的值就应该消失,但是,
# 当下面代码再次调用f(60)的时候(这个f()函数就是fun_c()函数)
# 却能够打印出val的值???
def fun(val):
  'val是得到的分数'
  # 打印此时存储的val的地址
  print("%x" % id(val))
  def fun_c(passline):
    'passline是及格线'
    if val >= passline:
      print("通过")
    else:
      print("不及格")
  return fun_c
f = fun(89) # f就是fun_c函数
# 利用__closure__打印出fun_c()函数的属性,可以发现f中第一个元素的id值和val的id值地址相同
# 这说明如果引用了外部的变量(enclosing变量)的话,会将这个变量添加到函数属性中
# 当再次进行查找(即f(60))的时候,并不是到代码中去查找,而是到函数属性中去查找
# 也就是上面的fun_c的属性中有val的值,是一个元组,不能够改变
print(f.__closure__)
f(60)
f = fun(89)
f(90)

运行结果:

12ee0b0
(<cell at 0x017B24B0: int object at 0x012EE0B0>,)
通过
12ee0b0
不及格

闭包的作用:

1. 代码的封装

2. 代码复用

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
从Python的源码来解析Python下的freeblock
May 11 Python
python列出目录下指定文件与子目录的方法
Jul 03 Python
Python 爬虫的工具列表大全
Jan 31 Python
用python写个自动SSH登录远程服务器的小工具(实例)
Jun 17 Python
Python实现的视频播放器功能完整示例
Feb 01 Python
浅析Python pandas模块输出每行中间省略号问题
Jul 03 Python
python 获得任意路径下的文件及其根目录的方法
Feb 16 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
Apr 27 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
Jul 01 Python
python右对齐的实例方法
Jul 05 Python
用python进行视频剪辑
Nov 02 Python
Django中的JWT身份验证的实现
May 07 Python
利用Python实现在同一网络中的本地文件共享方法
Jun 04 #Python
python实现超简单的视频对象提取功能
Jun 04 #Python
利用python库在局域网内传输文件的方法
Jun 04 #Python
基于python的图片修复程序(实现水印去除)
Jun 04 #Python
python实现requests发送/上传多个文件的示例
Jun 04 #Python
python3写的简单本地文件上传服务器实例
Jun 04 #Python
Python装饰器的执行过程实例分析
Jun 04 #Python
You might like
用PHP实现维护文件代码
2007/06/14 PHP
ThinkPHP模版引擎之变量输出详解
2014/12/05 PHP
Yii全局函数用法示例
2017/01/22 PHP
20款超赞的jQuery插件 Web开发人员必备
2011/02/26 Javascript
JS中Iframe之间传值的方法
2013/03/11 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
js实现本地图片文件拖拽效果
2017/07/18 Javascript
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
vue实现PC端录音功能的实例代码
2019/06/05 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
JS运算符简单用法示例
2020/01/19 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
解决VUEX的mapState/...mapState等取值问题
2020/07/24 Javascript
详解Python3中字符串中的数字提取方法
2017/01/14 Python
Python数据结构之单链表详解
2017/09/12 Python
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
深入浅析python 中的匿名函数
2018/05/21 Python
浅谈Python中(&amp;,|)和(and,or)之间的区别
2019/08/07 Python
如何安装2019Pycharm最新版本(详细教程)
2019/09/26 Python
opencv中图像叠加/图像融合/按位操作的实现
2020/04/01 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
2020/07/09 Python
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
纽约家具、家居装饰和地毯店:ABC Carpet & Home
2017/06/21 全球购物
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
感恩节活动方案
2014/01/27 职场文书
2014年党员自我剖析材料
2014/10/07 职场文书
销售员未完成销售业绩的检讨书
2014/10/12 职场文书
导游词之麻姑仙境
2019/11/18 职场文书
python3 删除所有自定义变量的操作
2021/04/08 Python
java executor包参数处理功能 
2022/02/15 Java/Android
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android
《进击的巨人》新联动CM 兵长强势出击兽巨人
2022/04/05 日漫