偷学Python第二十二天:Python中的闭包

人生苦短我用Python

偷学Python第二十二天:Python中的闭包

目标:可以用Python做一些简单的数据分析。
在这里插入图片描述

坚持完成自己的目标!勿忘初心~

今日学习目标

Python的闭包、装饰器以及内置函数、匿名函数、递归函数

闭包

在函数中提出的概念,简单来说就是一个函数定义中引用了函数外定义的变量,并且该函数可以在其定义环境外被执行。这样的一个函数我们称之为闭包。实际上闭包可以看做一种更加广义的函数概念。因为其已经不再是传统意义上定义的函数。

闭包的条件:

  1. 外部函数中定义了内部函数
  2. 外部函数是有返回值
  3. 返回值是:内部函数
  4. 内部函数还引用了外部函数的变量

格式

def 外部函数():
    ...
    def 内部函数():
        ...
    return 内部函数

示例代码

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/21
"""


def func():
    a = 100

    def inner_func():
        b = 200
        print(a, b)

    return inner_func


x = func()
print(x)  # <function func.<locals>.inner_func at 0x0000021704CD9620>
x()  # 100 200
# 这样就可以直接调用inner_func函数,如果return不返回一个内部函数的话是不会有任何输出的

使用闭包还可以完成计数器的效果

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/21
"""


def generate_count():
    container = [0]

    def add_one():
        container[0] += 1
        print(f"这是第{container[0]}次调用")

    return add_one


count = generate_count()
count()  # 这是第1次调用
count()  # 这是第2次调用
count()  # 这是第3次调用

闭包的缺点

  1. 作用域没有那么直观
  2. 因为变量不会被垃圾回收所以有一定的内存占用问题。

闭包的作用:

  1. 可以使用同级的作用域

  2. 读取其他元素的内部变量

  3. 延长作用域

今日学习总结

  1. 闭包似优化了变量,原来需要类对象完成的工作,闭包也可以完成.

  2. 由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存.

  3. 闭包的好处,使代码变得简洁,便于阅读代码。

  4. 闭包是理解装饰器的基础

明日学习计划

系统的学习一下装饰器

甜甜有话说

今天家里停电让我很难受,本来以为可以把函数的进阶都系统的学习一下,结果都没有完成,明天补上吧

座右铭:不要在该奋斗的年纪选择安逸!!

加油

古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。——苏轼

猜你喜欢

转载自blog.csdn.net/weixin_46163658/article/details/106268146