闭包函数:定义在函数内部的函数,并且该函数包含对外部函数作用域中名字的引用-->称为...
注意:该函数的作用域关系
在函数定义阶段就规定死了,与调用位置无关!!!
# 例一 def f(): x = 1 def f1(): print(x) return f1 x=22 f = f() f() --->执行结果:1 #例二 def f(): x=2 def f1(): print(x) return f1 f1=f() def foo(): x = 1 f1() foo() --->执行结果:2 def f(): x =1 def f1(): x+=1 print(x) return f1 res=f() res() #在这里尝试修改x的值报错,原因是,x被当成了局部变量,而局部作用域内不存在x --->UnboundLocalError: local variable 'x' referenced before assignment
函数传值的两种方式:通过参数直接传值和通过闭包
#方式一 import requests def get(url): response = requests.get(url) if response.status_code == 200: print(response.text) get('https://www.baidu.com/') #此方法每次要获取百度网页内容时,都需要调用get()函数并且把百度的网页地址作为参数传给函数体,不利于使用
#方式二 import requests # import time # # def f(url): # def f1(): # response =requests.get(url) # if response.status_code == 200: # print(response.text) # return f1 # # baidu = f('https://www.baidu.com/') # baidu() # time.sleep(3) # python = f('https://www.python.org') # python() # 此方法通过闭包,使全局变量baidu,python指向局部变量f1,而f1指向存储函数体的内存地址, # baidu = f('https://www.baidu.com/')获取的是f1这个指向函数体的内存地址,在调用时,才会执行 # f1()的函数体功能,获取不同网址的时候只需要使用变量名+()即可