python函数闭包

函数闭包

在嵌套的函数中,如果内嵌函数包含对外部函数作用域(而非全局作用域)中变量的引用,那么该内嵌函数就是闭包函数,简称闭包(Closures)
闭包中被内部函数引用的变量,不会因为外部函数结束而被释放掉,而是一直存在内存中,直到内部函数被调用结束。

# 举一个简单的例子:
x=1
def outer():
    x=2
    def inner():
        print(x)
    return inner
func=outer()
func() # 结果为2

闭包的用途

# 方式一:之前我们给函数传值是以参数的方式进行传值
import requests
def get(url):
    return requests.get(url).text

# 方式二:现在可以将值包给函数
def page(url):
    def get():
        return requests.get(url).text
    return get
# 这样做的好处是:方式一在下载同一页面时需要重复传入url,而方式二只需要传一次值,就会得到一个包含指定url的闭包函数,以后调用该闭包函数无需再传url

# 方式一下载同一页面
get('https://www.python.org')
get('https://www.python.org')
get('https://www.python.org')
# 方式二下载同一页面
python=page('https://www.python.org')
python()
python()
python()

判断闭包

函数名.closure 在函数是闭包函数时,返回一个cell元素;不是闭包时,返回None

def func():
    name = 'liming'
    def inner():
        print(name)
    print(inner.__closure__)  # (<cell at 0x0000027C14EB85E8: str object at 0x0000027C14F54960>,)
    return inner

name = 'liming'
def func():
    def inner():
        print(name)
    print(inner.__closure__)  # 返回None
    return inner
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值