5.3 Python 函数对象与闭包

AI权益码!Claude Code、Cursor等20+工具免费用! 购周边限时赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

Python 函数对象与闭包

转载请标明出处(http://blog.csdn.net/lis_12/article/details/52835786).

函数对象

函数在Python中也是对象,也就是说函数也可以当成参数传递给其他函数,放在数据结构中,也可以作为函数的返回值.

当函数当作数据处理时,它将显式地携带与定义该函数的周围环境相关的信息.这将直接影响到函数中自由变量的绑定方式.

#foo.py
x = 1
def callfunc(func):
    return func()

#test.py
import foo

x = 2

def hello():
    print "hello.py x = %d"%x

foo.callfunc(hello)  #hello.py x = 2,hello函数用的是test.py中x的值

闭包

foo.callfunc(hello)中的hello将组成hello()函数的语句与这些语句的变量及其执行环境打包在一起,此时得到的对象称为闭包.

  1. 使用嵌套函数时,闭包将捕捉内部函数执行所需的整个环境.

    
    #foo.py
    
    x = 1
    def callfunc(func):
       return func()
    
    
    #test.py
    
    import foo
    def bar():
       x = 2
       def hello():
           print "hello.py x = %d"%x
       foo.callfunc(hello)
    bar() #hello.py x = 2
  2. 编写惰性求值或延迟求值的代码时,闭包和嵌套函数会发挥很大的作用.

    def bar():
       x = 2
       def hello():
           print "hello.py x = %d"%x
       return hello
    cnt = bar()
    print cnt   #<function hello at 0x00000000035D2828>
    cnt()       #hello.py x = 2

    bar()并没有左任何有意义的计算,它只是创建了hello函数,但是并未调用.

  3. 如果需要在一系列函数中保持某个状态,使用闭包是一种非常高效的方式.

    def fun():
       l = []
       def add_num(num = 0):
           l.append(num)
           return l
       return add_num
    
    n = fun()
    for i in range(3):
       v = n(i)
       print v
       if len(v) > 10:
           break
    '''
    result:
    [0]
    [0, 1]
    [0, 1, 2]
    '''

    保留了l的状态.

  4. 闭包会捕捉内部函数的环境,因此可以用来包装现有的函数,以便增加函数额外的功能.装饰器就是利用的此特征.

装饰器

(http://blog.csdn.net/lis_12/article/details/52693521)

迭代,生成器,列表解析

(http://blog.csdn.net/lis_12/article/details/52693507)

Python函数式编程】——闭包 一个函数定义中引入了函数定义以外的变量,并且该函数可以在其定义以外被执行,这样的一个函数称为闭包 阅读详情

相关推荐

函数对象闭包

函数作为变量保存在内存中的一种对象。就是把函数当成变量去使用,就是在函数调用阶段,将调用的函数赋一个变量名print('函数名也是不括号,其实就是一个地址')# print(inner) # <function inner at 0x7f80180d9ea0> 【 function(函数) inner (内部) at (在) 0x7f80180d9ea0 】"""执行结果函数名也是不括号,其实就是一个地址 =括号成功执行函数体。

王献运的博客 492

011、Python--函数对象闭包函数

一、函数对象的使用 二、闭包函数的介绍及用法

weixin_43988680的博客 566

py14.函数对象闭包函数

文章目录一、函数对象1.1 函数对象的作用1、函数名可以被引用2、函数名可以当作参数传入3、可以当函数的返回值4、函数名可以作为容器类型的元素1.2 函数对象的应用二、函数嵌套2.1 函数的嵌套调用2.2 函数的嵌套定义三、闭包函数3.1 闭包的用途 一、函数对象 函数的名字就是函数对象,它在python中是第一类对象函数名指向的是函数的内存地址。 1.1 函数对象的作用 1、函数名可以被引用 def bar(): print('from bar') f=bar f() 2、函数名可以当作参数传入

yangenguang的博客 201

python基础(十四):函数对象闭包

一、函数对象Python 中万物皆为对象函数也不例外,函数作为对象可以赋值给一个变量、可以作为元素添到集合对象中、可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的。 1、函数可以被引用 >>> def add(x,y): ... return x+y ... >>> func=add >>>...

一点一滴铺就人生 979

Python闭包

原因:闭包可以避免使用全局值并提供某种形式的数据隐藏。它还可以提供面向对象的解决问题的解决方案。 在Python中创建闭包必须满足的标准将在以下几点 - 1.必须有一个嵌套函数(函数内部的函数)。 2.嵌套函数必须引用封闭函数中定义的值。 3.闭包函数必须返回嵌套函数。 def make_multiplier_of(n): def multiplier(x): return...

迷心兔的博客 97

Pythonpython系列之函数闭包概念

文章内容丰富,涵盖了很多实用的知识点,对我来说非常有帮助。尤其是博主在文章中提供了很多实际操作的步骤和技巧,让我能够更好地应用所学的知识。非常感谢博主的分享,期待博主能够继续输出这样优质的好文。

康师傅没有眼泪 3526

3.4 Python 闭包函数工厂函数

闭包(Closure)和工厂函数(Factory Function)是Python中利用函数作为第一类对象的特性实现的重要技术。闭包通过__closure__属性记住外层作用域的变量,即使外层函数已执行完毕;工厂函数则通过返回闭包实现动态生成特定功能的函数。两者结合可用于状态管理(如计数器)、行为定制(如幂运算工厂)以及装饰器等场景。例如,装饰器本质是带参数的闭包工厂,而闭包还能简化回调函数和配置化函数的实现。这些技术以轻量级的方式替代类,提升代码的灵活性复用性。

ylumwd的博客 1102

函数对象闭包函数

目录一 . 函数对象闭包1.1 函数可以被引用1.2 函数可以作为容器类型的元素1.3 函数名可以作为参数传入另外一个函数1.4 函数的返回值可以是一个函数闭包函数2.1 闭包2.2 闭包的用途 一 . 函数对象闭包 函数对象指的是函数可以被当做’数据’来处理,具体可以分为四个方面的使用,我们如下 1.1 函数可以被引用 >>> def add(x,y): ... return x+y ... >>> func=add >>> fun

人丑就要多读书的博客 179

55Python函数高级:一篇文章彻底搞懂什么是“闭包

本文详细解释了闭包的定义、本质,以及函数闭包对象这几个概念的区别联系,同时介绍了闭包成立的条件以及相关内部状态的存储机制。在理解了闭包的基础之上,再次回顾了LEGB规则。

南宫理的日知录 1753

Python函数对象闭包

本文主要介绍了Python函数对象闭包函数对象指的是函数可以被当做’数据’来处理,具体可以分为四个方面的使用,我们就小编一起来看看具体的这四种实用方法吧。

hdxx2022的博客 128

python函数对象、内嵌、闭包函数

什么是函数对象函数对象的运用,什么嵌套,嵌套函数的运用,闭包函数的介绍

weixin_50627146的博客 1127

Python嵌套函数闭包的基础理解

闭包不仅是语法,更是思想的升华

测试者家园 1392

Python OOPs/OOP:Python 闭包

Python 中的闭包是一个内部函数对象,它的行为类似于对象,即使在外部函数完成执行之后,它也会记住并可以访问创建它的本地范围内的变量。即使封闭范围中的值不存在于内存中,闭包也是一个记住这些值的函数对象,就像我们示例中包含字符串“Hello”的“message”变量。实例 d1 会将 20 除以 2,因为我们用divider(2) 初始化了它,因此,对于除法,y 的值将为 2,并且 x = 20。例如,嵌套函数,在外部函数中声明的变量被内部函数使用,最后,外部函数返回一个函数,就像我们返回一个变量一样。

新华编程特战队 1942

PYTHON闭包、解包装饰器、工厂函数、回调函数

print(f"收到事件数据: {data}")

weixin_44073289的博客 1153

Python 中的高阶函数闭包

python高阶函数闭包

燕鹏 1163

Python闭包Closure的5个层次

闭包closure是嵌套函数nested functions中的一个概念concept。如果你还不了解闭包closures,上面的例子可能会让你很头疼。我们已经删除了outer_func函数function。但是,f()仍然可以打印 “Zhang San”,它是outer_func函数function的局部变量local variable。为什么删除outer_func函数后它的局部变量local variable仍然存在?显然,这不是因为"Zhang San"是魔术师。

Null的博客 1345

python 函数可以作为容器对象的元素_Python——函数对象闭包

一、函数对象精髓:可以把函数当成变量去用1.1函数可以被引用def func():pass# func=内存地址f=funcprint(f,func)f()1.2 函数可以作为容器类型的元素def func():print('111')l=[func,]l[0]()dic={'k1':func}print(dic)# 函数对象引用示范'''def login():print('登录功能')def ...

weixin_39749501的博客 91

Python函数对象闭包函数

闭:就是函数内部定义的参数,至少要有两层函数包:内部函数要使用外部函数名称空间中的名字只有同时满足两个或以上才能称之为闭包函数x=123returnindex()

shiyaopeng11的博客 156
上一篇: 5.2 Python lambda运算符
下一篇: 11 Python pyinstaller--将Python程序打包成单独的exe可执行文件
忧桑的小兔子
博客等级 码龄10年 105粉丝 199原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值