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

 时间:2024-10-14 10:14:38

1、首先,函数在p鲻戟缒男ython中可以像变量一样生成,传递,赋值。函数可以嵌套定义,像变量一样有作用域。函数对象有一些属性,比如:__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-闭包函数如何实现装饰器
  • 热门搜索
    初中生活的苦与乐 oppor7怎么样 背上肉多怎么减肥 腌黄瓜条怎么腌制好吃 hpv是什么病 root后怎么还原 后背长痘痘怎么去除 如何解酒最快 娘惹是什么意思 商品条形码如何申请