一、什么是闭包函数
闭:封闭
包:包裹
内层函数被外层函数包裹起来,内层函数可以引用外层函数的名字
闭包函数:
- 闭包函数必须在函数内部定义
- 闭包函数可以引用外层函数的名字
闭包函数的定义
闭包函数是 函数嵌套,函数对象,名称空间与作用域 结合体
def func(x):
x = 100
# inner是闭包函数
def inner():
print(x)
print(inner, 11)
return inner
func(1)
# res = func(1)
# print(res)
# print(func(1))
inner = func(1)
#inner()
<function func.<locals>.inner at 0x000001B67E1C2F78> 11
<function func.<locals>.inner at 0x000001B67E1C2F78> 11
Process finished with exit code 0
直接传参:
def func(x):
return x
func(1000)
通过闭包函数传参
def outer(number):
def inner():
print(number)
return inner
func = outer(1000)
func()
二、闭包函数的应用
闭包函数的应用是为了装饰器作准备
需求:爬取某个网站,打印获取数据的长度
方式一:直接传参
import requests
# 方式一:直接传参
def spider_func(url):
# 往url地址发送请求,获取响应数据
response = requests.get(url) # 必须接受url
# 状态码: 200
if response.status_code == 200:
# 获取当前url地址中所有的文本
print(len(response.text))
print(response.text)
url = 'https://www.cnblogs.com/xiaoyuanqujing/'
spider_func(url)
方式二: 通过闭包函数接受url地址,执行爬取函数
def spider_outer(url):
def spider_inner():
response = requests.get(url)
if response.status_code == 200:
print(len(response.text))
return spider_inner
spider_blog = spider_outer('https://www.cnblogs.com/xiaoyuanqujing/')
spider_blog()