python 3 函数对象与闭包使用入门

 时间:2026-02-15 09:33:39

1、首先,函数在python中可以像变量一样生成,传递,赋值。函数可以嵌套定义,像变量一样有作用域。

函数对象有一些属性,比如:

__doc__可以查看函数注释,

__annotations__可以查看类型标注,

__code__可以获取code对象(可用dis查看反汇编),

__closure__可以查看闭包。

python 3 函数对象与闭包使用入门

python 3 函数对象与闭包使用入门

2、如图是一个嵌套的函数定义,且内层函数读取了外层函数中的x。可以看到__closure__闭包中存在一个Cell Variable,它就是对x的引用。

python 3 函数对象与闭包使用入门

3、如刚才所见,python的闭包构造是将要引用的变量放在__closure__中。

因此,如下图所示的代码,所有构造的函数指向了同一个变量y(如红框所示,它们地址相同),且y的值是最终值4,所以用lambda表达式构造的这几个函数都是计算x -> x**4,而不是分别计算x**0, x**1, .... 这是一个容易犯的错误。

python 3 函数对象与闭包使用入门

4、有一种work around是使用eval函数,将当前y值转化为字符串,再将整个字符串eval。但这不是一种安全的做法。

python 3 函数对象与闭包使用入门

5、另一种方式是将要作为常量的值写成默认参数,如图所示。默认参数的计算会在函数构造时进行,因此每个函数有了不同的default_y。

python 3 函数对象与闭包使用入门

6、同理,嵌套函数的声明当中,如果闭包中的变量是常数,也可以用默认参数代替。

python 3 函数对象与闭包使用入门

  • 如何使用python语言中的闭包实现函数调用函数
  • 面试题谈什么是Python闭包
  • python里简单理解闭包的作用
  • php匿名函数和闭包的理解
  • Python-闭包函数如何实现装饰器
  • 热门搜索
    怎么释放c盘空间 qq银行卡怎么解绑 快递丢件怎么赔偿 牙齿过敏怎么办 双显示器怎么设置 山东建筑大学怎么样 耳屎怎么清理 closet怎么读 bt种子怎么用 安徽理工大学怎么样