python 函数进阶之闭包函数

yizhihongxing

Python 函数进阶之闭包函数

什么是闭包函数?

  • 一个能够访问自由变量(Free variable)的函数,通常是定义在某个函数内部的另一个函数
  • 现代编程语言的基本概念之一——函数式编程(Functional Programming)中的重要概念

闭包函数的实现方式

Python 中的函数式编程,可以通过以下两种方式来实现闭包函数:

  1. 内部函数中,用 nonlocal 声明变量,以便在内存中长期保存。这种方式的内部函数不会立即返回值,而是以函数的方式返回另一个函数(称为闭包函数):
def outer_function(msg):
    def inner_function():
        print(msg)
    return inner_function

hi_func = outer_function("Hello!")
hello_func = outer_function("Hi there!")
hi_func()      # 输出:Hello!
hello_func()   # 输出:Hi there!
  1. 内部函数将函数名作为返回值,以便外部程序能够像其他对象一样使用它。这种方式的内部函数会立即返回值(即另一个函数的引用),而不是一个闭包函数:
def outer_function(msg):
    def inner_function():
        print(msg)
    return inner_function()

hi_func = outer_function("Hello!")
hello_func = outer_function("Hi there!")
# hi_func()            # TypeError: 'NoneType' object is not callable
print(hi_func)        # 输出:<function outer_function.<locals>.inner_function at 0x10decb940>
hello_func()         # 输出:Hi there!

闭包函数的使用场景

闭包函数是一个十分实用的函数,它可以用于许多实际开发场景,如:

  1. 用作内部函数,避免全局变量污染:
def counter():
    count = 0
    def inner():
        nonlocal count
        count += 1
        print(count)
    return inner

counter_1 = counter()
counter_1()    # 输出:1
counter_1()    # 输出:2
counter_1()    # 输出:3

counter_2 = counter()
counter_2()    # 输出:1
counter_2()    # 输出:2
  1. 避免对传入参数的更改,更容易维护函数:
def generate_function(factor):
    def inner_function(value):
        print(value * factor)
    return inner_function

print_10_times = generate_function(10)
print_100_times = generate_function(100)

print_10_times(5)    # 输出:50
print_100_times(5)   # 输出:500

总结

  • 闭包函数是必会的 Python 函数进阶知识点之一
  • 理解闭包函数的定位和用途,有助于提升代码阅读和编写的效率和正确性

参考资料:

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 函数进阶之闭包函数 - Python技术站

(0)
上一篇 2023年6月5日
下一篇 2023年6月5日

相关文章

  • python 实现客户端与服务端的通信

    Python实现客户端与服务端的通信需要使用到socket编程。socket是网络编程的基础,它是网络通信的一种方式,不同操作系统实现方式可能有所不同,但原理都相似。 实现步骤:1. 创建服务器端的socket对象2. 绑定端口号和IP地址3. 开始监听客户端请求4. 接受客户端请求并且处理请求5. 编写客户端程序,连接到服务器6. 发送数据给服务器7. 接…

    python 2023年6月6日
    00
  • python 合并多个excel中同名的sheet

    合并多个Excel文件中同名的Sheet可以通过Python的pandas库来实现。具体步骤如下: 安装pandas库 在终端中输入以下命令安装pandas库: pip install pandas 导入pandas库 在Python代码文件中导入pandas库: import pandas as pd 读取Excel文件 使用pandas库的read_ex…

    python 2023年6月5日
    00
  • Python根据当前日期取去年同星期日期

    要取得当前日期的上一年同星期日期,可以利用Python的datetime模块和timedelta类来实现。 首先,我们需要获取当前日期,可以使用datetime模块中的now()函数,然后再使用timedelta类的days属性来表示时间偏移量。示例代码如下: import datetime # 获取当前日期 now_date = datetime.date…

    python 2023年6月2日
    00
  • python面向对象法实现图书管理系统

    Python面向对象实现图书管理系统的完整攻略如下: 1. 需求分析 首先,我们需要根据需求分析设计出我们的图书管理系统。该系统主要有以下几个功能: 添加新书籍 修改书籍信息 删除书籍 查看书籍列表 搜索特定书籍 2. 设计类 接下来,我们需要设计类来实现系统功能。 2.1 Book类 Book类表示一本书,包含以下属性: book_id:书籍id,必须唯一…

    python 2023年5月30日
    00
  • 匹配中文汉字的正则表达式介绍

    以下是“匹配中文汉字的正则表达式介绍”的完整攻略: 一、问题描述 在中文文本处理中,经常需要使用正则表达式来匹配中文汉字。本文将详细讲解如何使用正则表达式匹配中文汉字。 二、解决方案 2.1 匹配中文汉字的正则表达式 在正则表达式中,中文汉字的Unicode编码范围为\u4e00-\u9fa5。因此,我们可以使用\u4e00-\u9fa5来匹配中文汉字。以下…

    python 2023年5月14日
    00
  • Python字符串格式化输出方法分析

    下面是详细的“Python字符串格式化输出方法分析”的攻略: 什么是字符串格式化输出 字符串格式化输出是指将不同类型的数据,序列化成字符串在控制台或其他输出设备上输出。在 Python 中有多种方式进行字符串格式化输出,本文将讲述常用的两种方式。 百分号格式化输出 百分号格式化输出是 Python2 中常用的字符串格式化方法,在 Python3 中已被新的格…

    python 2023年5月14日
    00
  • Python中的Matplotlib模块入门教程

    让我为您讲解“Python中的Matplotlib模块入门教程”完整攻略。 Matplotlib模块入门教程 什么是Matplotlib? Matplotlib 是一个绘图库,用于在 Python 编程环境中绘制2D图表。它可以方便地生成各种图形,包括简单折线图、条形图、直方图和散点图等。 安装Matplotlib 在使用 Matplotlib 前,我们需要…

    python 2023年5月14日
    00
  • Python 脚本实现淘宝准点秒杀功能

    Python 脚本实现淘宝准点秒杀功能攻略 1. 背景说明 随着电商交易活动的不断升温,各大电商平台的双十一、618、年货节等活动已成为人们翘首以盼的一年一度的购物狂欢时刻。然而,商品抢购热度不减,人数逐渐增多,导致平台服务器负荷巨大,造成秒杀响应缓慢、失败等问题。本文主要介绍如何使用 Python 脚本实现淘宝秒杀功能,以及相应步骤和代码实现。 2. 实现…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部