x=2222(x)def
func1():
x=65842
deffunc2():
x=65412
(x) func2()
func1()
(x)2222
65412
2222
global:呼叫全域性變數
x=8888deffunc1():
deffunc2():
global
x x=10000000func2()
func1()
(x)10000000
local:呼叫外部變數
deff1():
x=1def
f2():
nonlocal x
x=666
(x) f2()
f1()
666
閉包函式:
1.內部函式
2.包含對外部作用域而非全域性作用域的引用
閉包函式特點:
1.自帶作用域
2.延遲計算
closure:
name='alex
'def
func():
name='
egon
'x=1000000000000000000000
defbar():
(name)
(x) a=1b=2
return
barf=func()
print(f.__closure__
[0].cell_contents)
print(f.__closure__[1].cell_contents)
egon
1000000000000000000000
例子:
name='lyp'
deffunc1():
name='
xiaobai
'def
func2():
(name)
return
func2
func1=func1()
func1()
xiaobai
money=8000
deffunc1():
money=6000
defmo_info(name):
print('
%s有%s錢
'%(name,money))
mo_info(
'xiaobai')
func1()
xiaobai有6000錢
deff0():
name='
henbai
'def
f1():
money=6666
deff2():
print('
xiaobai has %s
'%(money))
(name)
return
f2
return
f1f0()()()
xiaobai has 6666henbai
裝飾器:任意可呼叫物件,被裝飾的物件也可以任意可呼叫物件
功能:在不修改被修飾物件源**以及呼叫方式的前提下為其新增新功能
原則:1.不修改源**
2.不修改呼叫方法
目標:新增新功能
裝飾器的語法:在被裝飾物件的正上方的單獨一行,@裝飾器名字(將函式作為引數傳給裝飾器)
執行順序是自上而下,計算順序是自下而上
from urllib.request importurlopen
definfo(url):
defpa_pr():
return
urlopen(url).read()
return
pa_pr
pa_pr=info('
(pa_pr())
import
random
import
time
defindex():
time.sleep(random.randrange(1,4))
print('
welcome to the page')
defsp_time(haha):
deftime_d():
start_time=time.time()
haha()
stop_time=time.time()
print('
runtime is %s
'%(stop_time-start_time))
return
time_d
index=sp_time(index)
index()
Python閉包 裝飾器
閉包 legb法則 所謂閉包,就是將組成函式的語句和這些語句的執行環境打包一起時得到的物件 閉包最重要的價值在於封裝上下文環境 下面有個列子來解釋下閉包 列 deffunx x print 開始 deffuny y returnx y print 結束 returnfuny x funx 4 pri...
python 閉包 裝飾器
2.閉包格式 return bar 返回內嵌函式 in test print in 3.使用原理 4.總結 二 裝飾器 2.格式 return test in 閉包函式返回內嵌函式 test aa test aa 裝飾 def aa 這兒如果有引數,test in也必須有一樣的引數,test in中...
python函式篇 閉包 裝飾器
作用 使函式外部能訪問函式內部區域性變數,且當函式完後依然可以儲存該變數 特徵 函式內部巢狀,內部函式訪問外部函式區域性變數,外部函式返回內部函式位址 或者直接呼叫內部函式 defa num 4deff print num return f b a b 或者 defa num 4deff print...