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中实现字符串类型与字典类型相互转换的方法
Aug 18 Python
Python发送邮件测试报告操作实例详解
Dec 08 Python
Pycharm之快速定位到某行快捷键的方法
Jan 20 Python
python操作excel让工作自动化
Aug 09 Python
python多线程同步之文件读写控制
Feb 25 Python
DJango的创建和使用详解(默认数据库sqlite3)
Nov 18 Python
python 实现方阵的对角线遍历示例
Nov 29 Python
python如何实现word批量转HTML
Sep 30 Python
Flask-SocketIO服务端安装及使用代码示例
Nov 26 Python
Python语言规范之Pylint的详细用法
Jun 24 Python
Pygame如何使用精灵和碰撞检测
Nov 17 Python
Python中 range | np.arange | np.linspace三者的区别
Mar 22 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 htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
PHP session有效期问题
2009/04/26 PHP
php目录操作函数之获取目录与文件的类型
2010/12/29 PHP
PHP 字符串正则替换函数preg_replace使用说明
2011/07/15 PHP
一些php项目中比较通用的php自建函数的详解
2013/06/06 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
2014/08/18 PHP
PHP实现算式验证码和汉字验证码实例
2015/03/09 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
2016/11/07 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
用JavaScript和注册表脚本实现右键收藏Web页选中文本
2007/01/28 Javascript
JavaScript 对Cookie 操作的封装小结
2009/12/31 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
jQuery判断复选框是否勾选的原理及示例
2014/05/21 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
jquery.Callbacks的实现详解
2016/11/30 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
Koa从零搭建到Api实现项目的搭建方法
2019/07/30 Javascript
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
详解JavaScript中的数据类型,以及检测数据类型的方法
2020/09/17 Javascript
一篇超完整的Vue新手入门指导教程
2020/11/18 Vue.js
[01:34]2014DOTA2 TI预选赛预选赛 选手比赛房大揭秘!
2014/05/20 DOTA
Python深入学习之闭包
2014/08/31 Python
Python文件夹批处理操作代码实例
2020/07/21 Python
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
如何打印出当前源文件的文件名以及源文件的当前行号
2015/04/05 面试题
计算机专业应届毕业生自荐信
2013/09/26 职场文书
中学教师实习自我鉴定
2013/09/28 职场文书
20年同学聚会感言
2014/02/03 职场文书
优秀的应届生自荐信
2014/05/23 职场文书
高中同学会活动方案
2014/08/14 职场文书
付款承诺函范文
2015/01/21 职场文书
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技