目录
闭包函数
列如一个简单爬虫,这里的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)()
标签:闭包,return,August,python,##,time,print,response,def
From: https://www.cnblogs.com/yyds703/p/18398531