命名空間:當執行函式的時候,他會在記憶體中開闢乙個臨時命名空間,存放函式體內的所有變數與值的關係,隨著函式的執行完畢,臨時空間自動關閉。在程式執行中,開始只會把函式名放到記憶體中 ,函式在呼叫的時候才執行。作用域:是程式在執行過程中變數與值得起作用範圍
取值順序:對於變數和值最先起作用是函式內,然後是全域性,最後是內建
**從上至下依次執行, 呼叫函式:函式裡面從上至下依次執行。
print(globals()) # 全域性命名空間:所有變數
print(locals()) # 區域性命名空間:所有變數
a = 2b = 3
def func1():
c = 5
d = 6
print(globals()) # 全域性變數放在乙個字典中
return locals() #
print(func1())
global:在區域性空間內改變乙個全域性變數
nonlocal:在區域性作用域中,對父級作用域(或者更外層作用域非全域性作用域)的變數進行引用和修改,並且引用的哪層,從那層及以下此變數全部發生改變。
函式名是函式的名字,本質:變數,特殊的變數。
def func1():print(
666)
print(func1) #
0x0000000000872378>a = 6
print(a)
def func2():print(
666)
f =func2
print(f())
l1 =for i in range(1,5):'
f'+str(i))
print(l1)
a = 1def f1(x):
print(x)
f1(a)
def wraaper():def inner():
print(
666)
inner()
wraaper()
閉包:就是內層函式對外層函式(非全域性)變數的引用。
如何判斷 內層函式名.__closure__ cell 就是=閉包
name = '老男孩'
def wraaper2(n):
# n = '
老男孩'
相當於 def inner():
print(n)
inner()
print(inner.__clo
def func1():print(
'你有病呀,領導,測試我的執行效率幹甚。')
print(time.time()) # 時間戳
start_time =time.time()
func1()
time.sleep(
0.3)
end_time =time.time()
print(
'此函式的執行效率%s
' % (end_time - start_time))
def func1():print(
'你有病呀,領導,測試我的執行效率幹甚。')
def func2():
print(
'你有病呀,領導2,測試我的執行效率幹甚。')
func1()
def func1():
print(
'你有病呀,領導,測試我的執行效率幹甚。')
func1()
def timmer(f):
start_time =time.time()
f()time.sleep(
0.3)
end_time =time.time()
print(
'此函式的執行效率%s
' % (end_time - start_time))
f1 = func1 # f1 =func1func1 = timmer # 新變數func1 =timmer
func1(f1)
def func2():
print(
'你有病呀,領導,測試我的執行效率幹甚。')
def timmer(f): # f =func1
def inner():
start_time =time.time()
f() # func1()
time.sleep(
0.3)
end_time =time.time()
print(
'此函式的執行效率%s
' % (end_time -start_time))
return
inner
# 語法糖@
@timmer # func1 =timmer(func1)
def func1():
print(
'你有病呀,領導,測試我的執行效率幹甚。')
func1 =timmer(func1) # inner
func1() # inner()
def timmer(f): # f =func1 函式名def inner(*args,**kwargs):
start_time =time.time()
f(*args,**kwargs)
time.sleep(
0.3)
end_time =time.time()
print(
'此函式的執行效率%s
' % (end_time -start_time))
return
inner
@timmer # func1 =timmer(func1) # inner
def func1(a,b):
print(a,b)
print(
'你有病呀,領導,測試我的執行效率幹甚。')
@timmer
def func2(a,b,c,d):
print(a,b,c,d)
print(
'你有病呀,領導,測試我的執行效率幹甚。')
func1(
1,2) # inner()
func2(
2,3,4,5
)def timmer(f): # f =func1 函式名
def inner(*args,**kwargs):
start_time =time.time()
ret = f(*args,**kwargs)
time.sleep(
0.3)
end_time =time.time()
print(
'此函式的執行效率%s
' % (end_time -start_time))
return
ret
return
inner
@timmer # func1 =timmer(func1) # inner
def func1(a,b):
print(a,b)
print(
'你有病呀,領導,測試我的執行效率幹甚。')
return
666print(
'************
',func1(1,2))
裝飾器和偏函式
1.裝飾器 讓其他函式在不需要做任何 變動的前提下增加額外的功能,返回值也是乙個函式物件 def a func print 1 def b print 2 func print 3 return b adef c print 4 當程式執行時 先執行 a,得到乙個1和函式的物件b,b和b 是不一樣的...
高階函式和裝飾器
函式式 一種程式設計正規化 純函式式程式設計 沒有變數,支援高階函式程式設計 python不是純函式式程式語言,支援高階函式程式設計 變數可以指向函式,函式名就是指向函式的乙個變數,與普通變數沒有區別 高階函式 能接收函式做引數的函式。map 是 python 內建的高階函式,它接收乙個函式 f 和...
無參裝飾器函式和帶參裝飾器函式
python裝飾器 下邊幾個裝飾器帶引數和不帶引數例子詳解 我們都知道,python中函式是可以被當做引數進行傳遞的,所以最直接的裝飾器例項如下 def decorator func 裝飾器函式 print welcome func print end def test print hello wo...