1. 程式人生 > >Python全棧之路Day20

Python全棧之路Day20

函數對象 port err pytho data foo http title itl

初次編輯2017年10月26日,星期四

摘要
一. 上節課復習
二. 裝飾器
三. 裝飾器補充
作業
今日總結

摘要

引用:Alex

  1. 裝飾器
  2. 無參裝飾器
  3. 有參裝飾器

一. 上節課復習

  1. 名稱空間與作用域
    1. 內置名稱空間
    2. 全局名稱空間
    3. 局部名稱空間
    4. 全局作用域:內置名稱空間、全局名稱空間
    5. 局部作用域:局部名稱空間
  2. 函數嵌套與嵌套作用域
  3. 函數對象
  4. 閉包

二. 裝飾器

  1. 為什麽要用裝飾器及開放封閉原則
  2. 什麽是裝飾器
  3. 無參裝飾器的簡單實現
import time
def timmer(func):
    def wrapper():
        start_time = time.time()
        func()
        stop_time = time.time()
        print(‘run time is %s ‘ % (stop_time - start_time))
    return wrapper

@timmer        #index=timmer(index)
def index():
    time.sleep(3)
    print(‘welcome to oldboy‘)

index()        #wrapper()
  1. 無參裝飾器修正part1
import  time
def timmer(func):
    def foo(*args,**kwargs):
        start_time = time.time()
        func(*args,**kwargs)
        stop_time = time.time()
        print(‘run time is %s‘ % (stop_time - start_time))
    return foo

@timmer    #index = timmer(index)
def index(name):
    time.sleep(2)
    print(‘welconme to my home! %s‘ % name)

@timmer    #auth = timmer(auth)
def auth(name,passwd):
    print(name,passwd)

index(‘egon‘)        #foo(‘egon‘)
auth(‘liuyang‘,‘123‘)    #foo(‘liuyang‘,‘123‘)
  1. 無參裝飾器修正part2
import time
def timmer(func):
    def foo(*args,**kwargs):
        start_time = time.time()
        res = func(*args,**kwargs)
        stop_time = time.time()
        print(‘run time is %s ‘% (stop_time - start_time))
        return res
    return foo

@timmer        # my_max = timmer(my_max)
def my_max(x,y):
    res = x if x > y else y
    return res

res = my_max(2, 3)        #foo(2, 3)
print(res)
  1. 有參裝飾器
def auth2(auth_type):
    def auth(func):
        def foo(*args,**kwargs):
            name = input(‘username: ‘).strip()
            passwd = input(‘passwd:‘)
            if auth_type == ‘sql‘:
                if name == ‘liuyang‘ and passwd == ‘123‘:
                    print(‘auth successful‘)
                    res = func(*args,**kwargs)
                    return res
                else:
                    print(‘auth error‘)
            else:
                print(‘還沒學會‘)
        return foo
    return auth

@auth2(auth_type = ‘sql‘)        #index = auth(index)
def index():
    print(‘welcome to index page‘)

index()        #foo()

三. 裝飾器補充

  1. 函數加多個無參裝飾器
@ccc
@bbb
@aaa
def func():
    pass

func=ccc(bbb(aaa(func))) 
  1. 函數加多個有參裝飾器
@ccc(‘c‘)
@bbb(‘b‘)
@aaa(‘a‘)
def func():
    pass

func=ccc(‘c‘)(bbb(‘b‘)(aaa(‘a‘)(func)))

作業

今日總結

  1. 待整理

Python全棧之路Day20