Python闭包执行时值的传递方式


本文摘自php中文网,作者不言,侵删。

这篇文章主要介绍了Python闭包执行时值的传递方式,结合实例形式分析了Python闭包执行时的传值原理与实现方式,代码中包含了较为详尽的注释便于理解,需要的朋友可以参考下

本文实例分析了Python闭包执行时值的传递方式。分享给大家供大家参考,具体如下:

代码中有问题和问题的解释。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#!/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)

阅读剩余部分

相关阅读 >>

Python用pillow(pil)进行图像操作实例

Python字符串如何拼接

Python不支持的数据类型是什么

列表、元组、字符串是Python的什么序列?

Python爬虫基础之网页组成解析

如何理解Python中with语句

Python 的 help 函数使用

Python输出结果怎么换行

Python列表如何统计元素的出现频率?(代码示例)

Python怎么安装bokeh

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...