1. 程式人生 > >Python——裝飾器之前奏

Python——裝飾器之前奏

如果要學習什麼是裝飾器,那麼就要先知道裝飾器的構成,可以說裝飾器是由以下三方面構成,分別為:

  • 作用域

說是作用域,其實就是在Python中的L_E_G_B的查詢順序,看程式碼吧

 a = abs(-2)              #abs是Python內建的函式,其實這時的abs()就相當於是一個built-in變數
 b = 3            #這就相當於是一個global變數
 def one_function():
     c = 1                #這就是一個enclosing變數
     def two_function():
             d = -1        #這就是一個local變數
             e = c+b
             return e

#比如說在函式two_function中,變數d中呼叫b,就會先在自身的函式中查詢b這個變數,如果未查詢到,則會進入上一層函式中進行查詢,即one_function函式中查詢b這個變數。

#查詢到時被呼叫.如果未查詢到,則會進入全域性變數進行查詢.

關於裝飾器的第二個方面就是關於高階函式

  • 高階函式

首先來說說高階函式的條件:

1、函式名可以進行賦值。

2、函式名可以作為函式引數,還可以作為函式的返回值。

#首先建立一個函式

 def add(x,y,f):
     return f(x)+f(y)

#然後我們呼叫這個函式
 add(-5,9,abs)              #14

#等價於abs(-5)+abs(9)
  • 閉包

接下來說一說閉包

#接下來說一說閉包,首先我們建立一個函式
 def foo3():
     def inner():
             return 8
     return inner

#在這個函式中,我們如何得到8這個值呢,
 foo3()()
8
 inner()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'inner' is not defined