python闭包函数

闭包

函数对象

  • 可以把函数当成变量去用,函数名的本质就是函数的内存地址
# 把函数当成参数传递给另一个函数
def func1(x):
    print(x)
print(func1)

# 可以把函数当成另一个函数的返回值
def func2(x):
    return x
print(func2)

# 可以当成容器类型的一个元素
dict = {'k1':func1}
print(dict.values())

运行结果:

<function func1 at 0x00000157DD5C60D0>
<function func2 at 0x00000157DD950C80>
dict_values([<function func1 at 0x00000157DD5C60D0>])

函数嵌套

  • 在调用一个函数的过程中又调用其他函数
def max2(x,y):
    if x > y:
        return x
    else:
        return y

def max4(a, b, c, d):
    res1 = max2(a, b)
    res2 = max2(res1, c)
    res3 = max2(res2, d)
    print(res3)

max4(5, 2, 6, 8)

运行结果:

8

  • 函数嵌套:在函数内定义其他函数

闭包函数

  • 定义:
# 什么是闭包函数
# “闭”:指的是该函数是内嵌函数
# “包”:指的是该函数包含对外层函数(非全局)作用域名字的引用
# 这里f2即为闭包函数
def f1():
    x = 3
    def f2():
        print(x)
    f2()
x = 1
f1()

运行结果:

3

  • 应用场景
# 在全局调用闭包函数
def f1():
    x = 3
    def f2():
        print(x)
    return f2

f = f1()
print(f)
f()

运行结果:

<function f1..f2 at 0x0000020262C10C80>

3

函数传参的方式:

  • 直接把函数需要的参数定义成形参
  • 把函数变成闭包函数,在包函数的命名空间为其传参
# 实现下载功能
# 通过传参实现
import requests
def get(url):
    response = requests.get(url)
    print(response)
get('https://www.baidu.com/')
# 实现下载功能
# 通过闭包实现
import requests
def outter(url):
    url
    def get():
        response = requests.get(url)
        print(response)
    return get
get = outter('https://www.baidu.com/')
get()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值