国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python中函數(shù)總結(jié)之裝飾器閉包詳解

2019-11-25 16:44:34
字體:
供稿:網(wǎng)友

1、前言

函數(shù)也是一個對象,從而可以增加屬性,使用句點來表示屬性。

如果內(nèi)部函數(shù)的定義包含了在外部函數(shù)中定義的對象的引用(外部對象可以是在外部函數(shù)之外),那么內(nèi)部函數(shù)被稱之為閉包。

2、裝飾器

裝飾器就是包裝原來的函數(shù),從而在不需要修改原來代碼的基礎(chǔ)之上,可以做更多的事情。

裝飾器語法如下:

@deco2@deco1def func(arg1,arg2...):  pass

這個表示了有兩個裝飾器的函數(shù),那么表示的含義為:func = deco2(deco1(func))

無參裝飾器語法如下:

@decodef func():  pass

表示的含義為func = deco(func)

有參裝飾器語法如下:

@deco(deco_args)def func():  pass

表示的含義為:func = deco(deco_args)(func)

多個裝飾器有的有參數(shù)有的沒參數(shù),語法如下:

@deco2(arg1,arg2)@deco1def func():  pass

表示的含義為foo = deco2(arg1,arg2)deco1(func)

裝飾器實際上就是函數(shù),接受的也是函數(shù)對象。

在執(zhí)行函數(shù)之前,可以運行預(yù)備代碼,也可以在執(zhí)行代碼后做一些清理工作。

看見裝飾器的時候,很可能在里面找到一些代碼,它定義了某個函數(shù),并在定義內(nèi)的某處嵌入了對目標(biāo)函數(shù)的調(diào)用或者至少一點引用。

3、裝飾器作用

裝飾器的作用如下:

引入日志;增加計時邏輯來檢測性能;給函數(shù)加入了事物的能力

以下例子表示為引入了計時的邏輯來檢測性能,如下:

#!/usr/bin/env pythonfrom time import ctime,sleepdef tsfunc(func): #裝飾器函數(shù)接受的是一個函數(shù)對象  def wrappedFunc():    print '[%s] %s() called' % (ctime(),func.__name__)    return func() #在這里調(diào)用了函數(shù)對象,也就是表示裝飾器是裝飾了原來的函數(shù),從而在原來函數(shù)的基礎(chǔ)上進行了一些操作  return wrappedFunc@tsfunc #裝飾器def foo():  passfoo()sleep(4)for i in range(2):  sleep(1)  foo()

 執(zhí)行結(jié)果如下:

[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

在裝飾器函數(shù)中,增加了時間戳并且調(diào)用了目標(biāo)函數(shù),裝飾器的返回值是一個包裝了函數(shù)

4、閉包

如果在一個內(nèi)部函數(shù)里,對在外部作用于(但不是全局作用域)的變量進行引用,那么內(nèi)部函數(shù)被認為是閉包closure,定義在外部函數(shù)內(nèi)的但由內(nèi)部函數(shù)引用或者使用的變量稱之為自由變量。

閉包的主要作用如下:

安裝計算;隱藏狀態(tài);在函數(shù)對象和作用域中隨意的切換。

回調(diào)就是函數(shù),閉包也是函數(shù),但是能攜帶一點額外的作用域。

#!/usr/bin/env pythondef counter(start_at=0):  count = [start_at]  def incr():    count[0] += 1    return count[0]  return incrcount= counter(5)print count()print count()

在上面的例子可以看到,函數(shù)內(nèi)部的函數(shù)incr引用了外部的變量count,并且每次進行加一,從而這個變量count稱之為自由變量。

以上這篇python中函數(shù)總結(jié)之裝飾器閉包詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 文山县| 台湾省| 拜泉县| 凉山| 冕宁县| 林周县| 信丰县| 隆林| 隆安县| 西安市| 区。| 青田县| 鸡西市| 浪卡子县| 舟山市| 昌邑市| 繁昌县| 精河县| 潮安县| 黄冈市| 唐山市| 广丰县| 房山区| 辽宁省| 揭阳市| 广汉市| 六枝特区| 克东县| 泸西县| 田东县| 雷州市| 邵东县| 金寨县| 阳高县| 洛浦县| 于都县| 林州市| 贵定县| 米泉市| 北海市| 赣榆县|