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 topn 取最大的n个数或最小的n个数方法

Python安装以后怎么用

Python中::-1代表什么?

Python中strip()函数有什么用法

Python爬虫需要安装什么

认识Python的json.dumps()和json.loads()

Python vscode输出乱码

关于Python如何操作消息队列(rabbitmq)的方法教程

详解Python中for循环的工作原理

Python pip是什么原理

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




打赏

取消

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

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

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

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

评论

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