欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統(tǒng) 1852 0

1、前言

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

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

2、裝飾器

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

裝飾器語法如下:

            
@deco2
@deco1
def func(arg1,arg2...):
  pass
          

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

無參裝飾器語法如下:

            
@deco
def func():
  pass

          

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

有參裝飾器語法如下:

            
@deco(deco_args)
def func():
  pass
          

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

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

            
@deco2(arg1,arg2)
@deco1
def func():
  pass
          

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

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

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

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

3、裝飾器作用

裝飾器的作用如下:

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

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

            
#!/usr/bin/env python

from time import ctime,sleep

def tsfunc(func): #裝飾器函數(shù)接受的是一個函數(shù)對象
  def wrappedFunc():
    print '[%s] %s() called' % (ctime(),func.__name__)
    return func() #在這里調用了函數(shù)對象,也就是表示裝飾器是裝飾了原來的函數(shù),從而在原來函數(shù)的基礎上進行了一些操作
  return wrappedFunc

@tsfunc #裝飾器
def foo():
  pass

foo()
sleep(4)

for i in range(2):
  sleep(1)
  foo()
          

? 執(zhí)行結果如下:

            
[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ù)中,增加了時間戳并且調用了目標函數(shù), 裝飾器的返回值是一個包裝了函數(shù)

4、閉包

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

閉包的主要作用如下:

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

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

            
#!/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()

          

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

以上這篇python中函數(shù)總結之裝飾器閉包詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 中文字幕在线不卡 | 在线播放国产一区二区三区 | 太平公主一级艳史播放高清 | 亚洲精品久久久 | 欧美日韩精品一区二区 | 久久一er精这里有精品 | 欧美极品jizzhd欧美 | a成人 | 国产一级毛片视频 | 成人网在线免费观看 | 国产视频在线免费观看 | 波多野结衣日韩 | 91福利小视频 | 日韩欧美综合在线二区三区 | 久久在线视频 | 精品免费久久久久欧美亚一区 | 天天躁夜夜躁狠狠躁2024 | 九九久久精品视频 | 婷婷综合影院 | 久精品视频 | 国产欧美一级二级三级在线视频 | 亚洲国产婷婷香蕉久久久久久99 | 精品欧美一区二区三区在线 | 久久日本精品国产精品白 | 99久久国产免费福利 | 亚洲精品视频在线 | 欧美视频观看 | 国产欧美日韩不卡一区二区三区 | 色.com| 国产精品亚洲第一 | 久草视频官网 | 日日a.v拍夜夜添久久免费 | 一级做一级爱a做片性视频视频 | 福利免费在线 | 国产AV亚洲精品久久久久 | 亚洲欧美日韩综合二区三区 | 婷婷丁香色综合图亚洲 | 亚洲精品在线第一页 | 久草最新在线 | 刮伦人妇A片1级 | 网红和老师啪啪对白清晰 |