閉包函式在看裝飾器之前,我們先來搞清楚什麼是閉包函式。python是一種物件導向的程式語言,在python中一切皆物件,這樣就使得變數所擁有的屬性,函式也同樣擁有。這樣我們就可以理解在函式內建立乙個函式的行為是完全合法的。這種函式被叫做內嵌函式,這種函式只可以在外部函式的作用域內被正常呼叫,在外部函式的作用域之外呼叫會報錯,例如:
而如果內部函式裡引用了外部函式裡定義的物件(甚至是外層之外,但不是全域性變數),那麼此時內部函式就被稱為閉包函式。閉包函式所引用的外部定義的變數被叫做自由變數。閉包從語法上看非常簡單,但是卻有強大的作用。閉包可以將其自己的**和作用域以及外部函式的作用結合在一起。下面給出乙個簡單的閉包的例子:而如果內部函式裡引用了外部函式裡定義的物件(甚至是外層之外,但不是全域性變數),那麼此時內部函式就被稱為閉包函式。閉包函式所引用的外部定義的變數被叫做自由變數。閉包從語法上看非常簡單,但是卻有強大的作用。閉包可以將其自己的**和作用域以及外部函式的作用結合在一起。下面給出乙個簡單的閉包的例子:def count():a = 1b = 1def sum():c = 1return a + c # a - 自由變數return sum
python裝飾器
def welcome(func): # 引數是乙個函式def inner_f():"""這是裝飾器中的welcome函式"""print('welcome'.center(40,'~'))func()return inner_f # 返回值是另乙個函式,使用該返回的函式替代作為引數的函式
@welcome # 說明底下定義的函式被welcome所裝飾,使用該返回的函式替代作為引數的函式def name():"""這個是name函式"""print('name is toto')
name() # 呼叫welcome 函式
1、 被裝飾的函式存在引數的時候
在構建裝飾器的時候,作為返回值的函式是用來替代作為引數的函式的,所以這兩個函式所需要的引數必須一致。就時說再定義函式裝飾器的時候,指定作為引數的函式可以由於任意個引數以及作為返回值的函式可以右任意個引數,這樣就能保證再實際使用的時候不論被裝飾的函式需要幾個引數,都能使用該裝飾器。def welcome(func): # 引數是乙個函式def inner_f(*args,*kwargs): # 指定返回的函式可以有任意個引數"""這是裝飾器中的welcome函式"""print('welcome'.center(40,'~'))func(args,**kwargs) # 作為引數的函式也有任意個引數return inner_f # 返回值是另乙個函式
@welcome # 可以裝飾乙個引數的函式def name(name):"""這個是name函式"""print('name is %s' %name)
@welcome # 也可以裝飾兩個引數的函式def stuinfo(name,age):print('name is %s ,age is %d' %(name,age))
name('toto')stuinfo('lala',16)
KVM巢狀虛擬化 在虛擬機器中建立虛擬機器
一般情況下,我們是無法在kvm虛擬機器裡面再去建立虛擬機器的,因為我們的kvm虛擬機器的cpu預設情況下並不支援虛擬化功能,對於inter的cpu來說,如果要支援虛擬化功能,必須要有乙個叫vmx的特性,以下是乙個物理伺服器的cpu資訊 在cpu特性 flags 中包含了vmx這個特性,說明這台伺服器...
VirtualBox中Ubuntu虛擬機器全屏
轉自 在virtualbox中安裝了ubuntu12.04,螢幕不能全屏,調節螢幕風辨率最大只能到1024x768,螢幕四周空著許多白框,很不舒服。解決辦法 1.安裝virtualbox的增強功能 virtualbox 裝置 安裝增強功能 執行之後可以將相關增強軟體包載入到ubuntu的虛擬光碟機下...
centos中安裝虛擬機器
我這裡選用的虛擬機器軟體為virtualbox wget 新建檔案 vim etc yum.repos.d virtualbox.repo 寫入以下內容 virtualbox name oracle linux rhel centos releasever basearch virtualbox b...