day14

一:編寫函數(shù),(函數(shù)執(zhí)行時間用time.sleep(n)代表)

import time

def index():
    time.sleep(1)
    print("歡迎來到index")

index()

二:編寫裝飾器详炬,為函數(shù)加上統(tǒng)計時間的功能

import time
from functools import wraps

def timmer(func):
    def wrapper(*args,**kwargs):
        strat = time.time()
        res = func(*args,**kwargs)
        end = time.time()
        print(f"運行時間為:{end-strat}")
        return res
    return wrapper

@timmer
def index():
    time.sleep(1)
    print("歡迎來到index")

index()

三:編寫裝飾器盐类,為函數(shù)加上認(rèn)證的功能

import time
from functools import wraps

def timmer(func):
    def wrapper(*args,**kwargs):
        strat = time.time()
        res = func(*args,**kwargs)
        end = time.time()
        print(f"運行時間為:{end-strat}")
        return res
    return wrapper

def login(func):
    def wrapper(*args,**kwargs):
        inp_name = input("請輸入用戶名:").strip()
        inp_pwd = input("請輸入密碼:").strip()
        if inp_name == 'yang' and inp_pwd == '123':
            print("登錄成功")
        else:
            print("登錄失敗")
        res = func(*args,**kwargs)
        return res
    return wrapper

@login
@timmer
def index():
    time.sleep(1)
    print("歡迎來到index")

index()

四:編寫裝飾器,為多個函數(shù)加上認(rèn)證的功能(用戶的賬號密碼來源于文件)呛谜,要求登錄成功一次在跳,后續(xù)的函數(shù)都無需再輸入用戶名和密碼
注意:從文件中讀出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')轉(zhuǎn)成字典格式

from functools import wraps
def login(func):
    def wrapper(*args,**kwargs):
        global login_status
        if login_status == 1:
            res = func(*args,**kwargs)
            return res
        else:
            num = 0
            while num < 3:
                inp_name = input("username===>:").strip()
                inp_pwd = input("password===>:").strip()
                with open('day14.txt', mode="r", encoding='utf-8') as f:
                    for line in f:
                        list = line.strip('\n').split(":")
                        if inp_name in list:
                            if inp_pwd == list[1]:
                                print("登錄成功")
                                login_status = 1
                                num = 3
                                break
                        else:
                            print("密碼錯誤")
                            num += 1
                    else:
                        print("用戶不存在")
                        num += 1
            res = func(*args, **kwargs)
            return res
    return wrapper



login_status = 0

@login
def f1():
    print("from f1")
@login
def f2():
    print("from f2")
@login
def f3():
    print("from f3")

f1()
f2()
f3()

五:編寫裝飾器隐岛,為多個函數(shù)加上認(rèn)證功能猫妙,要求登錄成功一次,在超時時間內(nèi)無需重復(fù)登錄聚凹,超過了超時時間割坠,則必須重新登錄

import time
from functools import wraps

def login(func):
    def wrapper(*args,**kwargs):
        global login_status
        global login_time
        now_time = time.time()
        if login_status == 1 :
            if now_time<login_time+300:
                res = func(*args,**kwargs)
                return res
            else:
                print("登錄超時,請重新登錄")
                num = 0
                while num < 3:
                    inp_name = input("username===>:").strip()
                    inp_pwd = input("password===>:").strip()
                    with open('day14.txt', mode="r", encoding='utf-8') as f:
                        for line in f:
                            list = line.strip('\n').split(":")
                            if inp_name in list:
                                if inp_pwd == list[1]:
                                    print("登錄成功")
                                    login_status = 1
                                    login_time = time.time()
                                    num = 3
                                    break
                            else:
                                print("密碼錯誤")
                                num += 1
                        else:
                            print("用戶不存在")
                            num += 1
        else:
            num = 0
            while num < 3:
                inp_name = input("username===>:").strip()
                inp_pwd = input("password===>:").strip()
                with open('day14.txt', mode="r", encoding='utf-8') as f:
                    for line in f:
                        list = line.strip('\n').split(":")
                        if inp_name in list:
                            if inp_pwd == list[1]:
                                print("登錄成功")
                                login_status = 1
                                login_time = time.time()
                                num = 3
                                break
                        else:
                            print("密碼錯誤")
                            num += 1
                    else:
                        print("用戶不存在")
                        num += 1
            res = func(*args, **kwargs)
            return res
    return wrapper

@login
def f1():
    print("from f1")
@login
def f2():
    print("from f2")
@login
def f3():
    print("from f3")
    
login_status = 0
login_time = 0
f1()
f2()
f3()

六:編寫下載網(wǎng)頁內(nèi)容的函數(shù)妒牙,要求功能是:用戶傳入一個url彼哼,函數(shù)返回下載頁面的結(jié)果

七:為題目五編寫裝飾器,實現(xiàn)緩存網(wǎng)頁內(nèi)容的功能:
具體:實現(xiàn)下載的頁面存放于文件中湘今,如果文件內(nèi)有值(文件大小不為0)沪羔,就優(yōu)先從文件中讀取網(wǎng)頁內(nèi)容,否則象浑,就去下載,然后存到文件中

擴展功能:用戶可以選擇緩存介質(zhì)/緩存引擎琅豆,針對不同的url愉豺,緩存到不同的文件中

八:還記得我們用函數(shù)對象的概念,制作一個函數(shù)字典的操作嗎茫因,來來來蚪拦,我們有更高大上的做法,在文件開頭聲明一個空字典冻押,然后在每個函數(shù)前加上裝飾器驰贷,完成自動添加到字典的操作

from functools import wraps

d = {}

def add_dic(func):
    def wrapper(*args,**kwargs):
        d.update({func.__name__:func})
        res = func(*args,**kwargs)
        return res
    return wrapper

@add_dic
def f1():
    print("from f1")

@add_dic
def f2():
    print("from f2")

@add_dic
def f3():
    print("from f3")

九 編寫日志裝飾器,實現(xiàn)功能如:一旦函數(shù)f1執(zhí)行洛巢,則將消息2017-07-21 11:12:11 f1 run寫入到日志文件中括袒,日志文件路徑可以指定
注意:時間格式的獲取

import time
time.strftime('%Y-%m-%d %X')

import time
from functools import wraps

def log_w_outter(filepath):
    def log_w(func):
        def wrapper(*args,**kwargs):
            res = func(*args,**kwargs)
            with open(filepath,'a',encoding='utf-8') as f:
                log = time.strftime('%Y-%m-%d %H:%M:%S {} run' .format(func.__name__))
                f.write(log+'\n')
            return res
        return wrapper
    return log_w

@log_w_outter(filepath='day14.txt')
def f1():
    print("from f1")

f1()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市稿茉,隨后出現(xiàn)的幾起案子锹锰,更是在濱河造成了極大的恐慌芥炭,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恃慧,死亡現(xiàn)場離奇詭異园蝠,居然都是意外死亡,警方通過查閱死者的電腦和手機痢士,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門彪薛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人怠蹂,你說我怎么就攤上這事善延。” “怎么了褥蚯?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵挚冤,是天一觀的道長。 經(jīng)常有香客問我赞庶,道長训挡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任歧强,我火速辦了婚禮澜薄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘摊册。我一直安慰自己肤京,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布茅特。 她就那樣靜靜地躺著忘分,像睡著了一般。 火紅的嫁衣襯著肌膚如雪白修。 梳的紋絲不亂的頭發(fā)上妒峦,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音兵睛,去河邊找鬼肯骇。 笑死,一個胖子當(dāng)著我的面吹牛祖很,可吹牛的內(nèi)容都是我干的笛丙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼假颇,長吁一口氣:“原來是場噩夢啊……” “哼胚鸯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拆融,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤蠢琳,失蹤者是張志新(化名)和其女友劉穎啊终,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體傲须,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡蓝牲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了泰讽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片例衍。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖已卸,靈堂內(nèi)的尸體忽然破棺而出佛玄,到底是詐尸還是另有隱情,我是刑警寧澤累澡,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布梦抢,位于F島的核電站,受9級特大地震影響愧哟,放射性物質(zhì)發(fā)生泄漏奥吩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一蕊梧、第九天 我趴在偏房一處隱蔽的房頂上張望霞赫。 院中可真熱鬧,春花似錦肥矢、人聲如沸端衰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旅东。三九已至,卻和暖如春十艾,著一層夾襖步出監(jiān)牢的瞬間玉锌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工疟羹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人禀倔。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓榄融,卻偏偏與公主長得像,于是被迫代替她去往敵國和親救湖。 傳聞我的和親對象是個殘疾皇子愧杯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353