函式和裝飾器

2022-06-22 09:33:16 字數 3803 閱讀 1508

命名空間:當執行函式的時候,他會在記憶體中開闢乙個臨時命名空間,存放函式體內的所有變數與值的關係,隨著函式的執行完畢,臨時空間自動關閉。

作用域:是程式在執行過程中變數與值得起作用範圍

取值順序:對於變數和值最先起作用是函式內,然後是全域性,最後是內建

在程式執行中,開始只會把函式名放到記憶體中 ,函式在呼叫的時候才執行。

**從上至下依次執行, 呼叫函式:函式裡面從上至下依次執行。

print(globals())  # 全域性命名空間:所有變數
print(locals())  # 區域性命名空間:所有變數
a = 2

b = 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 = 1

def 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 =func1

func1 = 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...