1.什么是闭包?闭包:闭包是闭包(函数内的函数),包是容器(内部函数在外部范围而不是全局范围内引用变量)。闭包指的是:函数内部函数对外部作用域的引用,而不是全局作用域。提示:之前,我们使用参数将外部值传递给函数。闭包提供了另一种思维方式,把它包起来,把它包起来,把它包起来。defouter():x=1definner():print(x)returninnerf=outer()deff2():x=2f()f2()outputs11函数传参的两种方式方法一:使用参数形式deffunc(x):print(x)func(1)func(1)func(1)output111给函数传参方法二:打包给函数defoutter(x):x=1definner():print(x)returninnerf=outer(1)f()f()f()#查看闭包的元素print(F"f.__closure__[0].cell_contents:{f.__closure__[0].cell_contents}")output111f.__closure__[0].cell_contents:12.闭包函数applicationclosure的含义:返回的函数对象不仅是一个函数对象,还在函数外面包裹了一层作用域是添加,这使得无论在何处调用函数,都可以首先使用自己包装的作用域。应用领域:延迟计算(以前传参数,现在包裹起来),爬虫。importrequestsdefget(url):response=requests.get(url)print(f"done:{url}")get('https://www.baidu.com')get('https://www.baidu.com')get('https://www.baidu.com')get('https://www.cnblogs.com/linhaifeng')get('https://www.cnblogs.com/linhaifeng')get('https://www.cnblogs.com/linhaifeng')输出done:https://www.baidu.comdone:https://www.baidu.comdone:https://www.baidu.comdone:https://www.cnblogs.com/linhaifengdone:https://www.cnblogs.com/linhaifengdone:https://www.cnblogs.com/linhaifeng上面的方法非常复杂,如果我们使用默认参数,我们只能解决一个url,所以我们可以想办法使用闭包。importrequestsdefoutter(url):defget():response=requests.get(url)print(f"done:{url}")returnget#学习中遇到问题没人回答?小编创建了一个Python学习交流群:711312441baidu=outter('https://www.baidu.com')python=outter('https://www.python.org')baidu()baidu()python()python()输出完成:https://www.baidu.com完成:https://www.baidu.com完成:https://www.python.org完成:https://www.python.org
