1、前言
函数也是一个对象,从而可以增加属性,使用句点来表示属性。
如果内部函数的定义包含了在外部函数中定义的对象的引用(外部对象可以是在外部函数之外),那么内部函数被称之为闭包。
2、装饰器
装饰器就是包装原来的函数,从而在不需要修改原来代码的基础之上,可以做更多的事情。
装饰器语法如下:
@deco2 @deco1 def func(arg1,arg2...): pass
这个表示了有两个装饰器的函数,那么表示的含义为:func = deco2(deco1(func))
无参装饰器语法如下:
@deco def func(): pass
表示的含义为func = deco(func)
有参装饰器语法如下:
@deco(deco_args) def func(): pass
表示的含义为:func = deco(deco_args)(func)
多个装饰器有的有参数有的没参数,语法如下:
@deco2(arg1,arg2) @deco1 def func(): pass
表示的含义为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()
执行结果如下:
[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
在装饰器函数中,增加了时间戳并且调用了目标函数,装饰器的返回值是一个包装了函数。
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()
在上面的例子可以看到,函数内部的函数incr引用了外部的变量count,并且每次进行加一,从而这个变量count称之为自由变量。
以上这篇python中函数总结之装饰器闭包详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Linux new version
SublimeText3 Linux latest version

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft

Notepad++7.3.1
Easy-to-use and free code editor
