闭包函数
一、什么 是闭包
闭包:闭是封闭(函数内部的函数),包是包含(该函数内部函数对外部作用域而非全局作用据的变量的应用)。
闭包是指:函数内部对外部作用于而非全局作用域的引用。
闭包函数: 传参的另外一种方式, 参数+函数包在一起返回出去
def outter():
x = 1
def inter():
print(x)
return inter
f = outter()
def f2():
x = 2
f()
f2()
#输出:
1
俩种为函数传参的方式
为函数传参的方式一:使用参数的形式
def func(x):
print(x)
func(1)
func(2)
func(3)
#输出:
1
2
3
为函数传参的方式二:包给函数
def outter(x):
x = 1
def inner():
print(x)
return inner
f = outter(1)
f()
# 查看闭包的元素
print(f.__closure__[0].cell_contents)
#输出:
1
1
1
二、闭包函数的应用
闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,有限使用自己外层包裹的作用域。
应用领域:延迟计算(原来是传参,现在是包起来),爬虫领域。
import requests
def get(url):
response = requests.get(url)
print(url)
get('https://www.baidu.com')
get('https://www.baidu.com')
get('https://www.baidu.com')
# 输出:
https://www.baidu.com
https://www.baidu.com
https://www.baidu.com
上面的方式比较复杂,如果用默认参数解决网站,可以考虑用闭包的方式。
import requests
def outter(url):
def get():
response = requests.get(url)
print(url)
return get
baidu = outter('http://www.baidu.com')
baidu()
baidu()
baidu()
#输出:
http://www.baidu.com
http://www.baidu.com
http://www.baidu.com