python 闭包函数
闭包函数
一、什么 是闭包
闭包:闭是封闭(函数内部的函数),包是包含(该函数内部函数对外部作用域而非全局作用据的变量的应用)。
闭包是指:函数内部对外部作用于而非全局作用域的引用。
闭包函数: 传参的另外一种方式, 参数+函数包在一起返回出去
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