python 函数进阶之闭包函数

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 selenium实现智联招聘数据爬取

    Python Selenium实现智联招聘数据爬取 智联招聘是国内最大的招聘网站之一,提供了大量的招聘信息。本文将介绍如何使用Python和Selenium实现智联招聘数据爬取。 环境准备 在开始之前,需要安装以下软件: Python 3.x Chrome浏览器 ChromeDriver驱动 ChromeDriver驱动可以从官网下载。下载后,将Chrome…

    python 2023年5月15日
    00
  • Python模块pexpect安装及使用流程

    下面是详细的“Python模块pexpect安装及使用流程”的攻略。在本文中,我们将讨论如何安装和使用Python模块pexpect,以及如何使用它来进行自动化测试。 安装pexpect 在开始之前,确保你已经安装了Python解释器。接下来,我们需要使用pip命令来安装pexpect模块: pip install pexpect 如果命令执行成功的话,你现…

    python 2023年5月14日
    00
  • python字符串的多行输出的实例详解

    以”python字符串的多行输出的实例详解”为主题,以下是完整的攻略。 什么是Python字符串的多行输出? 在Python中,字符串通常是单行变量。但是,在某些情况下,我们需要在一个变量中包含多行文本。这可能会涉及到长的描述、注释或多行代码。在这种情况下,使用多行字符串输出就非常方便。 三种方式实现Python字符串的多行输出 在Python中,有几种不同…

    python 2023年6月5日
    00
  • Python基础之函数原理与应用实例详解

    Python基础之函数原理与应用实例详解 1. 什么是函数? 函数是一个可重复使用的代码块,它接受一些输入参数,并根据这些参数进行操作,最后返回输出结果。 函数可以帮助我们把一个大问题分成若干个小问题,从而提高代码的复用性和可读性。 在Python中,我们可以使用def关键字来定义函数,如下所示: def function_name(parameters):…

    python 2023年5月19日
    00
  • python 中 os.walk() 函数详解

    当我们需要遍历某个目录及其子目录下的所有文件和目录时,可以使用 Python 的 os.walk() 函数。这个函数返回一个生成器,该生成器递归地遍历一个目录及其子目录中的所有文件和目录。下面是一个详细的攻略来讲解如何使用 os.walk() 函数。 函数定义 以下是 os.walk() 函数的定义: os.walk(top, topdown=True, o…

    python 2023年6月2日
    00
  • 利用python求积分的实例

    提到Python求解积分问题,一般会想到数值积分,即将积分转化为求解定积分的方法。下面将介绍Python中求解数值积分的方法以及一些实例说明。 一、使用Scipy库的integrate模块求解数值积分 在Python中,可以使用Scipy库的integrate模块进行数值积分的计算。其中最常用的函数为quad(),使用方法如下: from scipy imp…

    python 2023年6月5日
    00
  • Python bool布尔类型详解

    bool 类型只有两个值,要么为True(真),要么为False(假)。 bool 类型用于比较算式,如3>2这个算式里就称为“真”,Python当中用 True 来表示。 比如2>10这个算式,它是错误的,在程序世界里就称之为“假”,Python当中用 False 来表示。 实例如下: >>> 3>2 True >>&g…

    Python数据类型 2022年12月18日
    00
  • 如何在 Python 中使用 Selenium 设置动态显式等待?

    【问题标题】:How can I set a dynamic explicit wait using Selenium in Python?如何在 Python 中使用 Selenium 设置动态显式等待? 【发布时间】:2023-04-05 11:02:01 【问题描述】: 我几天前构建的一个程序在这里遇到了一点问题,所以我将非常简单地解释它: 我正在使用…

    Python开发 2023年4月5日
    00
合作推广
合作推广
分享本页
返回顶部