闭包函数
1.作用域关系在函数定义阶段就已经固定死了,与调用位置无关。
即在任意位置定义函数,都需要跑到定义函数时寻找作用域关系。
def f1():
x=1
def inner():
print(x)
return inner
func=f1()
def f2():
x=111111
func()
f2() # 打印结果为1
2.闭包函数
闭指的是该函数是一个内部函数
包指的是该函数对外部作用域(非全局作用域)名字的引用。
def outter():
x = 1
def inner():
print(x)
return inner
f=outter()
def f2():
x=1111111
f()
f2() # 1
def f3():
x=4444444444444
f()
f3() # 1
3.
为函数体传值的方式一:使用参数的形式
def inner(x):
print(x)
inner(1)
inner(1)
inner(1)
为函数体传值的方式二:包给函数
'''
def outter(x):
# x=1
def inner():
print(x)
return inner
f=outter(1)
f()
'''
最简单的获取封面内容的函数
直接通过实参给形参传值
缺点:每次爬取都要重新赋值,很费事
import requests
def get(url):
response=requests.get(url)
if response.status_code == 200:
print(response.text)
get('https://www.baidu.com')
get('https://www.python.org')
4.返回值返回的不仅仅是闭包函数的内存地址,还有外部作用域(不包括函数外部的作用域)名字的引用。
import requests
def outter(url):
# url='https://www.baidu.com'
def get():
response=requests.get(url)
if response.status_code == 200:
print(response.text)
return get
baidu=outter('https://www.baidu.com')
python=outter('https://www.python.org')
baidu()
python()
越是困难的事越要立即去做,这样收益才会最大!!!