闭包函数其实是 名称空间与作用域, 函数嵌套, 函数对象的中和运用
‘总结一句话来说‘ : 定义在函数内部的函数, 并且该函数包含对外部函数作用域中名字的引用,该函数就称为闭包函数
    
def outter():
     name=‘egon‘
     def inner():
         print(‘my name is %s‘ %name)
     return inner  #注意不能加括号
f=outter()    #f=inner
??定义阶段已经规定死了到‘outter‘下面的"x"去拿
def outter():
     x=2           
     def inner():
         # x=1
         print(‘from inner‘,x)
     return inner
??在全局里面定义也无效
 f=outter()  # f=inner
 print(f)
 x=11111111111111111
 f()  # 2
??把它装进一个函数,在函数里面再定义也是无效的
 def foo():
     x=111111111111111111
     f()
 foo()  # 2
import requests
??将"url"以参数的形式传入(也是最常用)
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‘)
??这是个获取网络源码的功能
import requests    
def outter(url):
    def get():
        response=requests.get(url)
        if response.status_code == 200:
            print(response.text)
    return get
    
baidu = outter(‘https://www.baidu.com‘)
baidu()
如果难以理解,就来个精简版
def outter(x):
	def wrapper():
		print(x)    #按照查找的优先级去查找"x"
	return wrapper  #吐出了函数"wrapper"的内存地址
f = outter(10)  #这里返回的值就是函数"wrapper"的内存地址,赋值给"f",加括号就调用
f()  #10
原文:https://www.cnblogs.com/songhaixing/p/14051164.html