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

 更新时间:2018年06月04日 09:48:00   作者:有一种宿命叫无能为力  
这篇文章主要介绍了Python闭包执行时值的传递方式,结合实例形式分析了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相关内容感兴趣的读者可查看本站专题:《Python函数使用技巧总结》、《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • TensorFlow实现随机训练和批量训练的方法

    TensorFlow实现随机训练和批量训练的方法

    本篇文章主要介绍了TensorFlow实现随机训练和批量训练的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Python中实现插值法的示例详解

    Python中实现插值法的示例详解

    在数据处理和分析中,插值法是一种常用的数值分析技术,用于估计在已知数据点之间的值,本文将详细介绍Python中插值法的实现方法,需要的可以参考下
    2024-02-02
  • 关于Pycharm无法debug问题的总结

    关于Pycharm无法debug问题的总结

    今天小编就为大家分享一篇关于Pycharm无法debug问题的总结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Pygame实现监听鼠标示例详解

    Pygame实现监听鼠标示例详解

    这篇文章主要介绍了通过Pygame模块实现监听鼠标的功能,文章的示例代码讲解详细,对我们的学习或工作有一定的价值,感兴趣的小伙伴可以了解一下
    2021-12-12
  • python文字和unicode/ascll相互转换函数及简单加密解密实现代码

    python文字和unicode/ascll相互转换函数及简单加密解密实现代码

    这篇文章主要介绍了python文字和unicode/ascll相互转换函数及简单加密解密实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python实例一个类背后发生了什么

    Python实例一个类背后发生了什么

    Python实例一个类背后发生了什么,本文为大家一一列出,感兴趣的朋友可以参考一下
    2016-02-02
  • 如何利用Python动态展示排序算法

    如何利用Python动态展示排序算法

    Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,能够简单、有效地实现面向对象编程,下面这篇文章主要给大家介绍了关于如何利用Python动态展示排序算法的相关资料,需要的朋友可以参考下
    2021-10-10
  • Python2.5/2.6实用教程 入门基础篇

    Python2.5/2.6实用教程 入门基础篇

    本文方便有经验的程序员进入Python世界.本文适用于python2.5/2.6版本.
    2009-11-11
  • 使用pandas批量处理矢量化字符串的实例讲解

    使用pandas批量处理矢量化字符串的实例讲解

    今天小编就为大家分享一篇使用pandas批量处理矢量化字符串的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python+pyqt5实现KFC点餐收银系统

    python+pyqt5实现KFC点餐收银系统

    这篇文章主要为大家详细介绍了python+pyqt5实现KFC点餐收银系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01

最新评论