# **************************************************************************
# Python学习
# **************************************************************************
# ** 所属主题: 函数
# ** 所属分层: 31 闭包函数
# ** 功能描述: 31 闭包函数
# ** 创 建 者: 陈红伟
# ** 创建日期: 2021/3/27 9:35 下午
# **************************************************************************
# ** 修改日期 修改人 修改内容
# ** 2021/3/27 陈红伟 新增学习内容代码
# **************************************************************************
# 一、大前提:
# 闭包函数=名称空间与作用域+函数嵌套+函数对象
# 核心点:名字的查找关系是以函数定义阶段准
# 二、什么是闭包函数
# "闭"函数指的是该函数是定义在一个函数内的(指的是该函数是内嵌函数)
# "包"函数指的是该函数包含对外层函数作用域名字的引用(不是对全局作用域)
def f1():
x = 33333
def f2():
print(x)
f2()
x = 1
f1() # 33333
def bar():
x=444
f1()
def foo():
x=222
bar()
foo() # 33333
# 闭包函数:函数对象
def f1():
x=66666
def f2():
print("函数f2:",x)
return f2
f=f1()
print(f) # <function f1.<locals>.f2 at 0x7fbbe50054c0>
def foo():
x=4
f()
foo() # 函数f2: 66666
# 三、闭包函数应用场景:
# 两种为函数体传参的的方式
# 方式一:直接把函数体需要的参数定义成形参
def f2(x):
print(x)
f2(1) # 1
f2(2) # 2
# 方式二:利用名称空间的概念给函数体传参
def f1():
x = 3
def f2():
print(x)
return f2
x=f1()
print(x) # <function f1.<locals>.f2 at 0x7f8002105670>
x() # 3
# demo:
import requests
# 传参的方案一:
def get(url):
response = requests.get(url)
print(len(response.text))
get("http://www.baidu.com") # 2381
# 传参的方案二:
def outter(url):
def get():
response = requests.get(url)
print(len(response.text))
return get
outter("http://www.baidu.com")() # 2381
Python基础31:闭包函数
最新推荐文章于 2024-07-22 19:43:52 发布