闭包函数

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()

猜你喜欢

转载自www.cnblogs.com/Roc-Atlantis/p/9168651.html