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实现获取Ip归属地等信息
Aug 27 Python
详解Python的Lambda函数与排序
Oct 25 Python
python通过Windows下远程控制Linux系统
Jun 20 Python
python通过配置文件共享全局变量的实例
Jan 11 Python
python协程之动态添加任务的方法
Feb 19 Python
python3反转字符串的3种方法(小结)
Nov 07 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
Mar 06 Python
Python urllib.request对象案例解析
May 11 Python
python爬虫泛滥的解决方法详解
Nov 25 Python
python之np.argmax()及对axis=0或者1的理解
Jun 02 Python
详解Python flask的前后端交互
Mar 31 Python
Python开发五子棋小游戏
Apr 28 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
BBS(php &amp; mysql)完整版(五)
2006/10/09 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
jquery实现非叠加式的搜索框提示效果
2014/01/07 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
js省市县三级联动效果实例
2020/04/15 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
WdatePicker.js时间日期插件的使用方法
2017/07/26 Javascript
AngularJs每天学习之总体介绍
2017/08/07 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
JS通过识别id、value值对checkbox设置选中状态
2020/02/19 Javascript
教你安装python Django(图文)
2013/11/04 Python
跟老齐学Python之编写类之三子类
2014/10/11 Python
python获得linux下所有挂载点(mount points)的方法
2015/04/29 Python
深入解答关于Python的11道基本面试题
2017/04/01 Python
详解Django将秒转换为xx天xx时xx分
2019/09/27 Python
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
司机职责范本
2014/03/08 职场文书
元宵节主持词
2014/03/25 职场文书
《她是我的朋友》教学反思
2014/04/26 职场文书
2014年四风个人对照检查及整改措施
2014/10/28 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
房产公证书样本
2015/01/23 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
营运督导岗位职责
2015/04/10 职场文书
浅谈python中的多态
2021/06/15 Python
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js
table设置超出部分隐藏,鼠标移上去显示全部内容的方法
2022/12/24 HTML / CSS