1. 程式人生 > >python學習第一天---裝飾器

python學習第一天---裝飾器

python函式(python3.7)

1.函式作用域LEGB

  L > E > G > B

  L:local  -函式內部作用域

  E:enclosing  -函式內部與內嵌函式之間

  G:global  -全域性變數

  B:build-in  -內建作用域

1 passline = 60  # 全域性變數
2 
3 def func(val):
4     if val >= passline:
5         print('pass')
6     else:
7         print('failed')
8 func(86)

 

2.閉包理解與使用

  函式實質與屬性

    1.函式是一個物件

    2.函式執行完成之後內部變量回收

    3.函式屬性

    4.函式返回值

passline = 60
def func(val):
    if val >= passline:
        print('pass')
    else:
        print('failed')
    def in_func():
        print(val)
    return in_func
f = func(68)
f()
def set_passline(passline):
    
def cmpp(val): if val>=passline:; print('pass') else: print('failed')
  return cmpp

 

3.裝飾器

裝飾器形成的過程

  

裝飾器的作用

  不想修改函式的呼叫方式,但是還想在原來的函式前後新增功能

  timer就是一個裝飾器函式,只有對一個函式有一些裝飾作用

  @timer  魔法糖(呼叫裝飾器的方式)

 原則:開放封閉原則

    開放:對擴充套件時開放的

    封閉:對修改是封閉的

裝飾器的固定模式

def wrapper(f):  #裝飾器函式,f是被裝飾的函式
    def inner(*args,**kwargs):
     “”“在被裝飾函式之前要做的事”“” ret
= f(*args,**kwargs)  #被裝飾的函式
     “”“在被裝飾函式之後要做的事”“”
return ret return inner @wrapper  # @裝飾器函式  func = wrapper(func)
def func(*args,**kwargs):   #被裝飾函式
  time.sleep(
0.01)
  print("hello world")
  return "新年好"
func()   #實際上執行的inner()