Python闭包执行时值的传递方式实例分析
作者:有一种宿命叫无能为力 发布时间:2021-09-22 14:43:50
标签:Python,闭包
本文实例分析了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程序设计有所帮助。
来源:https://blog.csdn.net/you_are_my_dream/article/details/53166767


猜你喜欢
- Python 操作 Excel本篇博客介绍一种 Python 操作 Excel 的办法,核心用到 xlrd与xlwt模块。xlrd 
- 实际的项目网站中或多或少的或用到多选框,我选用的一款是 Bootstrap Multiselect。 官
- MYSQL的事务处理主要有两种方法。 1、用begin,rollback,commit来实现 begin 开始一个事务 rollback 事
- 背景接口域名没有写死,而是动态获取。具体实现就是 通过读取一个静态json文件,来设置真实的接口域名。好处是原域名有可能被封,这样可以直接后
- 本文将想大家简单介绍一下XML HttpRequst对象基础方法,希望通过本文能够使大家对其有一个初步的了解readyState一共有5个可
- 前言学过编程的人应该对全局变量与局部变量这两个名词并不陌生,Python也同多数编程语言一样,也有全局变量与局部变量的概念但是与其他编程语言
- 数据库基本操作在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。会话用db.session表示。在准备把数据写
- 问题描述尝试用Python写一个Wordcloud的时候,出现了编码问题。照着网上某些博客的说法添添改改后,结果是变成了“UnicodeDe
- Ubuntu16.04自带python2.7与python3.5,某个项目编译却要求python版本大于等于3.7,遂考虑在原系统基础上再安
- SQL Server服务器的配置选项属于那种人们了解较少且经常误用的选项。当一个技术支持人员要求你按照某种方式调整一个选项、而另一个技术支持
- 本文实例为大家分享了python实现多人聊天室的具体代码,供大家参考,具体内容如下一、目的以实现小项目的方式,来巩固之前学过的Python基
- 什么是多态?多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charl
- 目标:代码改写成tf2格式把tensorflow 1.X中的代码,迁移到tensorflow2中。一些常见的改写经验。包括sess,tf.p
- 贪心算法贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意
- 和数据库打交道要频繁地用到SQL语句,除非你是全部用控件绑定的方式,但采用控件绑定的方式存在着灵活性差、效率低、功能弱等等缺点。因此,大多数
- 阅读上一篇:javascript面向对象编程(一)[javascript模拟传统OOP]javascript是一种非常灵活的语言,它的灵活度
- dplyr专注处理dataframe对象, 并提供更稳健的与其它数据库对象间的接口。一、5个关键的数据处理函数:select() 返回列的子
- 本文实例为大家分享了wxPython实现计算器的具体代码,供大家参考,具体内容如下# -*- coding: utf-8 -*-######
- Python与Perl,C和Java语言等有许多相似之处。不过,也有语言之间有一些明确的区别。本章的目的是让你迅速学习Pytho
- 一、时间对象timetime模块使用的是C语言函数库中的函数。只能处理1970/1/1到2038/12/31之间的数据。1.测量运行时间方法