Python基础31:闭包函数

# **************************************************************************
# 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值