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

作者:有一种宿命叫无能为力 时间:2021-09-22 14:43:50 

本文实例分析了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,闭包
0
投稿

猜你喜欢

  • Python读取ini配置文件传参的简单示例

    2022-02-06 09:51:36
  • 详解Python中heapq模块的用法

    2022-01-15 05:58:35
  • 详解Pytorch如何利用yaml定义卷积网络

    2023-02-16 10:46:01
  • python读取.data文件的实现

    2021-10-28 06:24:05
  • asp中数组的用法

    2008-05-12 22:29:00
  • 详解Django中Request对象的相关用法

    2021-12-08 16:30:06
  • Python爬虫工程师面试问题总结

    2023-06-10 13:23:20
  • python题解LeetCode303区域和检索示例详解

    2022-12-13 16:10:11
  • 推荐5款跨平台的PHP编辑器

    2023-10-18 12:49:40
  • Django中信号signals的简单使用方法

    2023-08-18 08:49:49
  • Python实现从多表格中随机抽取数据

    2022-07-01 01:58:18
  • Python Pillow Image.save 保存为jpg图片压缩问题

    2023-07-05 11:13:49
  • 一文带你吃透什么是PHP中的序列化

    2023-06-12 19:44:20
  • python 哈希表实现简单python字典代码实例

    2023-12-28 06:11:32
  • 通过Python实现控制手机详解

    2021-04-21 12:10:37
  • 详解Python中如何写控制台进度条的整理

    2023-12-31 03:32:51
  • 使用Abot中文分词组件来开发ASP站内搜索引擎

    2007-10-18 13:36:00
  • Django 用户登陆访问限制实例 @login_required

    2021-05-26 07:31:22
  • python PyGame五子棋小游戏

    2023-09-29 13:32:45
  • 对TensorFlow中的variables_to_restore函数详解

    2022-09-11 00:49:19
  • asp之家 网络编程 m.aspxhome.com