python中閉包區域性 全域性變數的使用

2021-09-12 11:38:37 字數 3653 閱讀 9431

in [4]

:def

log(func):.

..: time=0.

..:def

(*arg,

**kw):.

..:print

("call %s()"

%func.__name__)..

.: time+=1.

..:print

("---time----:"

,time)..

.:#return func(*args,**kw)..

.:in [5]

: @log

...:def

now():

...:

print

("---test----"

)in [6]

: now(

)call now(

)unboundlocalerror: local variable 'time' referenced before assignment

in [9]

:def

log(func):.

..: time=0.

..:def

(*arg,

**kw):.

..:print

("call %s()"

%func.__name__)..

.:nonlocal time

...: time+=1.

..:print

("---time----:"

,time)..

.:#return func(*args,**kw)..

.:in [10]

: @log

...:def

now():

...:

print

("---test----"

)in [11]

: now(

)call now()-

--time---

-:1in [12]

: now(

)call now()-

--time---

-:2in [13]

: now(

)call now()-

--time---

-:3

in [22]

:def

log(func):.

..: time=0.

..: time+=1.

..:print

("----log---time:"

,time)..

.:def(

*arg,

**kw):.

..:print

("call %s()"

%func.__name__)..

.: time2=5.

..: time2+=1.

..:print

("---time----:"

,time)..

.:return func(

*arg,

**kw)..

.:in [23]

: @log

...:def

now():

...:

print

("---test----")-

---log-

--time:

1in [24]

: now(

)call now()-

--time---

-:1-

--test---

-in [25]

: now(

)call now()-

--time---

-:1-

--test---

-

分析

in [52]

:def

log(text):.

..:print

("---日誌--").

..:def

decorator

(func):.

..:print

("---test__").

..:def

(*args,

**kw):.

..:print

("%s %s ()"

%(text,func.__name__)).

..:return func(

*args,

**kw)..

.:...

:return decorator

in [53]

: @log(

"execute").

..:def

now():

...:

print

("i love you ")-

--日誌---

--test__

in [54]

:#此處相當於now=log("execute")(now)

in [55]

: now(

)execute now (

)i love you

in [56]

: now.__name__

out[56]

:

python 中使用裝飾器對在執行期對函式進行一些外部功能的擴充套件。但是在使用過程中,由於裝飾器的加入導致直譯器認為函式本身發生了改變,在某些情況下——比如測試時——會導致一些問題。python 通過 functool.wraps 為我們解決了這個問題:在編寫裝飾器時,在實現前加入 @functools.wraps(func) 可以保證裝飾器不會對被裝飾函式造成影響

in [60]

:def

log(text):.

..:print

("---日誌--").

..:.

..:def

decorator

(func):.

..:print

("---test__").

..: @functools.wraps(func)..

.:def(

*args,

**kw):.

..:print

("%s %s ()"

%(text,func.__name__)).

..:return func(

*args,

**kw)..

.:...

:return decorator

in [61]

: @log(

"execute").

..:def

now():

...:

print

("i love you ")-

--日誌---

--test__

in [62]

: now(

)execute now (

)i love you

in [64]

: now.__name__

out[64]

:'now'

參考:

js 區域性變數 全域性變數 閉包

什麼是變數?變數的命名規範 1 變數名必須以字母.下標符號 或者 開頭 2 變數名的長度不得超過255個字元 3 變數名中不可以使用空格,並且開頭不得以數字開頭 4 不用使用指令碼語言中保留的關鍵字及保留符號作為變數名 5 變數名是區分大小寫的,var a 1和var a 1 指在程式中只在特定過程...

閉包 全域性變數與區域性變數

報錯 unboundlocalerror local variable t referenced before assignment 在 python 中,如果乙個函式使用了和全域性變數相同的名字且改變了該變數的值,那麼該變數就會變成區域性變數,那麼就會造成在函式中我們沒有進行定義就引用了,所以會報...

python全域性變數 區域性變數

定義在函式內的變數有區域性作用域,在乙個模組中最高端別的變數有全域性作用域。全域性變數的乙個特徵是除非被刪除掉,否則它們的存活到指令碼執行結束,且對於所有的函式,它們的值都是可以訪問的。global str global string def foo local str local string r...