目錄
- 閉包函式
- 裝飾器
- 登入裝飾器
閉包函式
列如一個簡單爬蟲,這裡的request
需要從第三方庫匯入
# import requests ##pip install request
# response = requests.get('http://www.xiaohuar.com/')
# response.encoding = 'gb2312' ##解碼方式
# data = response.text ###文字
# print(data)
##如果需要在抓或者更改網址就需要再寫一遍
##如response = requests.get('http://www.xiaohuar.com/')
##如response = requests.get('http://www.baidu.com/')
使用一層包裝的時候,寫的稍微簡潔一點了,但是還是要填同一個網址的時候重複填
import requests
def spider(url):
response = requests.get(url)
response.endcoding = 'gb2312'
data = response.text
return data
pa = spider('http://www.baidu.com/')#這裡就用http就行https安全效能高,需要多次握手等,爬不出來東西
print(pa) ###可以爬出前端的一些資訊
但是終極還是使用閉包,第二次使用就只需要一個f()
就行
import requests
def wrapper(url):
def spider():
response = requests.get(url)
response.endcoding = 'gb2312'
data = response.text
return data
return spider
name = '第一次'
f = wrapper('https://www.baidu.com/')##要爬完整請改成http(不要那個s)
print(f(),f'/n**50')
print('*'*50,f"{name}")##自設計分隔符
import time
time.sleep(2)##設定時間間隔
name = '第二次'
print(f())
print('/'*50,f"{name}")##自設計分隔符
裝飾器
裝飾器:改變功能的時候不改變原來的呼叫方式,並且改變原來函式的程式碼
import time
### 這是一個時間驗證模組
def time_count():
start_time = time.time()##此刻時間
time.sleep(2.4)
end_time = time.time()##此刻時間
timecc = (end_time - start_time)
return timecc
##下面即為裝飾器模板
def deco(func):
def wrapper():
res = func()
return res
return wrapper
f = deco(time_count)
print(f())
登入裝飾器
userinfo_dict = {'nick': '123'}
is_login = False # 定義成可變型別或者使用global
def login(func):
def wrapper(*args, **kwargs):
global is_login ###這裡使用全域性定義
if not is_login:
username = input('請輸入你的使用者名稱>>>').strip()
pwd = input('請輸入你的密碼>>>').strip()
if pwd == userinfo_dict.get(username):
print('登陸成功')
is_login = True
res = func(*args, **kwargs)
return res
else:
print('傻逼,來老子這裡吃霸王餐')
###如果已經登入了再重新整理使用程式就不用反覆登入了
else:
res = func(*args, **kwargs)
return res
return wrapper
def func1():
pass
login(func1)()