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中函数总结之装饰器闭包详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Python3.6環境下加載Pickle文件報錯:ModuleNotFoundError:Nomodulenamed...

如何解決jieba分詞在景區評論分析中的問題?當我們在進行景區評論分析時,往往會使用jieba分詞工具來處理文�...

如何使用正則表達式匹配到第一個閉合標籤就停止?在處理HTML或其他標記語言時,常常需要使用正則表達式來�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中