• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > python中函数总结之装饰器闭包详解

python中函数总结之装饰器闭包详解

作者:jingxian 字体:[增加 减小] 来源:互联网

jingxian 通过本文主要向大家介绍了python闭包函数,python 闭包,python中的闭包,python 闭包 括号,闭包详解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

1、前言

函数也是一个对象,从而可以增加属性,使用句点来表示属性。

如果内部函数的定义包含了在外部函数中定义的对象的引用(外部对象可以是在外部函数之外),那么内部函数被称之为闭包。

2、装饰器

装饰器就是包装原来的函数,从而在不需要修改原来代码的基础之上,可以做更多的事情。

装饰器语法如下:

@deco2
@deco1
def func(arg1,arg2...):
  pass
</div>

这个表示了有两个装饰器的函数,那么表示的含义为:func = deco2(deco1(func))

无参装饰器语法如下:

@deco
def func():
  pass
</div>

表示的含义为func = deco(func)

有参装饰器语法如下:

@deco(deco_args)
def func():
  pass
</div>

表示的含义为:func = deco(deco_args)(func)

多个装饰器有的有参数有的没参数,语法如下:

@deco2(arg1,arg2)
@deco1
def func():
  pass
</div>

表示的含义为foo = deco2(arg1,arg2)deco1(func)

装饰器实际上就是函数,接受的也是函数对象。

在执行函数之前,可以运行预备代码,也可以在执行代码后做一些清理工作。

看见装饰器的时候,很可能在里面找到一些代码,它定义了某个函数,并在定义内的某处嵌入了对目标函数的调用或者至少一点引用。

3、装饰器作用

装饰器的作用如下:

引入日志;增加计时逻辑来检测性能;给函数加入了事物的能力

以下例子表示为引入了计时的逻辑来检测性能,如下:

#!/usr/bin/env python

from time import ctime,sleep

def tsfunc(func): #装饰器函数接受的是一个函数对象
  def wrappedFunc():
    print '[%s] %s() called' % (ctime(),func.__name__)
    return func() #在这里调用了函数对象,也就是表示装饰器是装饰了原来的函数,从而在原来函数的基础上进行了一些操作
  return wrappedFunc

@tsfunc #装饰器
def foo():
  pass

foo()
sleep(4)

for i in range(2):
  sleep(1)
  foo()
</div>

 执行结果如下:

[root@python 420]# python deco.py 
[Tue Apr 19 16:15:01 2016] foo() called
[Tue Apr 19 16:15:06 2016] foo() called
[Tue Apr 19 16:15:07 2016] foo() called
</div>

在装饰器函数中,增加了时间戳并且调用了目标函数,装饰器的返回值是一个包装了函数。

4、闭包

如果在一个内部函数里,对在外部作用于(但不是全局作用域)的变量进行引用,那么内部函数被认为是闭包closure,定义在外部函数内的但由内部函数引用或者使用的变量称之为自由变量。

闭包的主要作用如下:

安装计算;隐藏状态;在函数对象和作用域中随意的切换。

回调就是函数,闭包也是函数,但是能携带一点额外的作用域。

#!/usr/bin/env python

def counter(start_at=0):
  count = [start_at]
  def incr():
    count[0] += 1
    return count[0]
  return incr

count= counter(5)
print count()
print count()
</div>

在上面的例子可以看到,函数内部的函数incr引用了外部的变量count,并且每次进行加一,从而这个变量count称之为自由变量。

以上这篇python中函数总结之装饰器闭包详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

</div>

您可能想查找下面的文章:

  • Python闭包的两个注意事项(推荐)
  • 简单谈谈Python中的闭包
  • python中函数总结之装饰器闭包详解
  • 深入理解python中的闭包和装饰器
  • Python函数中的函数(闭包)用法实例
  • Python函数中的函数(闭包)用法实例
  • 简析Python的闭包和装饰器
  • 简单讲解Python中的闭包
  • 浅谈Python中的闭包
  • Python编程中运用闭包时所需要注意的一些地方

相关文章

  • python pickle 和 shelve模块的用法
  • 深入理解Python对Json的解析
  • 用Python编写简单的定时器的方法
  • 使用PyCharm配合部署Python的Django框架的配置纪实
  • Python常见格式化字符串方法小结【百分号与format方法】
  • 浅谈python中的实例方法、类方法和静态方法
  • 在Python的循环体中使用else语句的方法
  • Python 实现文件的全备份和差异备份详解
  • 在Django中限制已登录用户的访问的方法
  • python计算时间差的方法

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 详解Python中的__new__()方法的使用
    • python多线程用法实例详解
    • Python中内建的数据结构:列表、元组和字典
    • Python常用的文件及文件路径、目录操作方法汇总介绍
    • 利用python获取某年中每个月的第一天和最后一天
    • python常见排序算法基础教程
    • python实现一次创建多级目录的方法
    • python使用socket向客户端发送数据的方法
    • 下载安装setuptool和pip linux安装pip
    • python使用rabbitmq实现网络爬虫示例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有