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开发之字符串string操作方法实例详解
Nov 12 Python
python编写微信远程控制电脑的程序
Jan 05 Python
Python实现简单求解给定整数的质因数算法示例
Mar 25 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
Nov 21 Python
Python操作json的方法实例分析
Dec 06 Python
使用Python制作表情包实现换脸功能
Jul 19 Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 Python
PyQt+socket实现远程操作服务器的方法示例
Aug 22 Python
Python判断字符串是否为合法标示符操作
Sep 03 Python
python实现暗通道去雾算法的示例
Sep 27 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
Jan 28 Python
Python matplotlib 利用随机函数生成变化图形
Apr 26 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概述.
2006/10/09 PHP
php生成xml简单实例代码
2009/12/16 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
JS判断不能为空实例代码
2013/11/26 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
jQuery实现的导航条切换可显示隐藏
2014/10/22 Javascript
谈谈对offsetleft兼容性的理解
2015/11/11 Javascript
js与applet相互调用的方法
2016/06/22 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
Angular组件化管理实现方法分析
2017/03/17 Javascript
Vue+Element UI+Lumen实现通用表格分页功能
2019/02/02 Javascript
PostgreSQL Node.js实现函数计算方法示例
2019/02/12 Javascript
如何在JavaScript中创建具有多个空格的字符串?
2020/02/23 Javascript
Vue父子之间值传递的实例教程
2020/07/02 Javascript
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
Python实现单词拼写检查
2015/04/25 Python
Python的Twisted框架上手前所必须了解的异步编程思想
2016/05/25 Python
python 全文检索引擎详解
2017/04/25 Python
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
Python Numpy 自然数填充数组的实现
2019/11/28 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
2015年综治维稳工作总结
2015/04/07 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书
小程序实现悬浮按钮的全过程记录
2021/10/16 HTML / CSS
解决redis批量删除key值的问题
2022/03/23 Redis
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers