当前位置:

首页 > 编程开发 > Python编程:有关函数返回值以及最佳实践基本指导原则

Python编程:有关函数返回值以及最佳实践基本指导原则

本篇内容作为以函数为主题的最后一篇,来介绍一下函数返回值以及编写函数的一些基本的最佳实践指导原则。函数输出:返回值函数的返回值是Python领先于竞争对手的东西之一。在大多数其他语言中,函数通常只允许返回一个对象,但是在Python中,你可以返回一个元组——这意味着可以返回任何你想要的东西。这个特性允许程序员编写用其他语言编写的软件要困难得多,或者肯定会更加乏味。我们已经说过,要从函数返回一些东西,我们需要使用return语句,后面跟着我们想要返回的东西。函数体中可以根据需要有多个返回语句。另一方面,如果

本文目录

    本篇内容作为以函数为主题的最后一篇,来介绍一下函数返回值以及编写函数的一些基本的最佳实践指导原则。

    函数输出:返回值

    函数的返回值是Python领先于竞争对手的东西之一。在大多数其他语言中,函数通常只允许返回一个对象,但是在Python中,你可以返回一个元组——这意味着可以返回任何你想要的东西。这个特性允许程序员编写用其他语言编写的软件要困难得多,或者肯定会更加乏味。我们已经说过,要从函数返回一些东西,我们需要使用return语句,后面跟着我们想要返回的东西。函数体中可以根据需要有多个返回语句。

    另一方面,如果在函数体中我们不返回任何东西,或者我们调用一个“裸”return语句,函数将返回None。当不需要时,这种行为是无害的,但是也允许你整些有趣的模式的,确认Python是一种非常一致的语言。

    我们说它是无害的,因为你永远不会被迫收集函数调用的结果。下面将通过一个例子向你展示所说的意思:

    # 返回none值
    def func():
    pass
    
    func() # 这个调用是没有接收的,将丢失
    a = func() # 这个调用被a接收
    print(a) # prints: None

    注意,整个函数体仅由pass语句组成。正如官方文档告诉我们的那样,pass是一个空操作,因为当它被执行时,什么也不会发生。当语法上需要语句但不需要执行代码时,它作为占位符非常有用。在其他语言中,我们可能只需要用一对花括号({})来表示,这定义了一个空作用域;但在Python中,作用域是由缩进代码定义的,因此像pass这样的语句是必要的。

    还要注意,func()的第一个调用返回一个没有接收的值(None)。正如我们前面提到的,接收函数调用的返回值不是必须的。

    这很好,但不是很有趣,我们写一个有趣的函数怎么样?还记得我们讨论过阶乘函数。让我们在这里编写我们自己的实现(为了简单起见,我们假设函数总是用适当的值正确调用,所以我们不需要检查输入参数):

    # 阶乘函数,返回单个值
    def factorial(n):
    if n in (0, 1):
    return 1
    result = n
    for k in range(2, n):
    result *= k
    return result
    
    f5 = factorial(5) # f5 = 120

    注意,我们有两个返回点。如果n是0或1,则返回1。否则,我们执行所需的计算并返回结果。

    提示:在Python中,通常使用in操作符来进行成员检查,就像我们在前面的例子中所做的那样,而不是更冗长的检查:

    if n == 0 or n == 1:

    …

    现在再来试着把这个函数写得更简洁一点:

    # 返回单个值示例.2
    from functools import reduce
    from operator import mul
    
    def factorial2(n):
    return reduce(mul, range(1, n + 1), 1)
    
    f5 = factorial(5) # f5 = 120

    这个简单的示例展示了Python是如何既优雅又简洁的。即使我们从未见过reduce()或mul(),这个实现也是可读的。如果你不能看懂或理解它,抽出几分钟来做一些Python文档研究,直到你清楚它的行为。能够在文档中查找函数并理解由其他人编写的代码是每个开发人员都需要能够执行的任务,因此将其作为一个挑战。

    提示:学会查看Python自带帮助,请确保查找help()函数,这在使用控制台进行探索时非常有用。

     返回多个值

    正如我们前面提到的,与大多数其他语言不同,Python非常容易从一个函数返回多个对象。这个特性带来了无限的可能性,并允许你以一种难以用其他语言再现的风格进行编码。我们的思维会受到我们使用的工具的限制。因此,当Python给予你比其他语言更多的自由时,它就是在增强你的创造性能力。

    返回多个值非常简单:只需使用元组(显式或隐式)。让我们看一个模仿divmod()内置函数的简单例子:

    # 返回多个值
    def moddiv(a, b):
    return a // b, a % b
    
    print(moddiv(20, 7)) # prints (2, 6)

    我们可以将前面代码中粗体部分包装在括号中,使其成为显式元组,但没有必要这样做。上面的函数同时返回除法的结果和余数。

    有关函数的有益建议

    在编写函数时,遵循一些最佳实践指导原则是非常有用的,这样才能很好地编写函数。我们来看一看这些指导原则,以助益你更好的理解和应用函数。

    1)函数应只做一件事

    做一件事的函数很容易用一句话来描述。执行多项任务的函数可以重构拆分为执行一项任务的更小函数。这些较小的函数通常更容易阅读和理解。

    2)函数应是很小的

    它们越小,测试和编写它们就越容易,这样它们也就更专注于只做一件事。

    3)输入参数越少越好

    接受大量参数的函数很快就变得难以管理(以及其他问题)。当需更多的输入参数时,酌情考虑,如重构为类对象或其它复合型数据。

    4)函数的返回值应该一致

    返回False和返回None不是一回事,即使在布尔上下文中,它们的值都是False。False表示我们有信息(即False),而None表示没有信息。尽可能编写以一致的方式返回的函数,无论其逻辑中发生了什么。

    5)函数不应该有副作用

    换句话说,函数不应该影响调用它们的值。这可能是目前最难理解的一条实践性原则,所以这里给出一个使用列表的示例。在下面的代码中,注意如何不使用sorted()函数对numbers进行排序,该函数实际上返回的是已排序的数字副本。相反,list.sort()方法作用于numbers对象本身,这很好,因为它是一个方法(属于对象的函数,因此有权修改它):

    >>> numbers = [4, 1, 7, 5]
    >>> sorted(numbers) # 不会排序原始的'numbers' 数字列表
    [1, 4, 5, 7]
    >>> numbers # 验证一下
    [4, 1, 7, 5] # 很好,没有改变原始数据对象
    >>> numbers.sort() # 这将实质性影响原始列表
    >>> numbers
    [1, 4, 5, 7]

    所以,遵循以上这些常规的基本指导原则,将有益于你写出更好的函数,为你实现更好的服务。

    本文小结

    到此关于Python函数的主体性知识就介绍完了——函数定义语法、输入参数定义以及相关规则、返回值实现和多返回值等,并简单总结了基于最佳实践的一些有益基本指导原则。请多加练习和体会,以便更好的理解和掌握作为Python的核心特性之一的函数。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 编程 Python
    相关文章 更多
    python删除一个列表里的重复元素的方法与代码示例
    python删除一个列表里的重复元素的方法与代码示例

    学习如何使用Python高效删除列表中的重复元素。本文提供5种常见方法的代码示例,涵盖保持顺序与不保持顺序的场景,适合初学者和进阶开发者参考。

    Python写接口的步骤及完整代码示例
    Python写接口的步骤及完整代码示例

    详细讲解使用Python编写Web接口的核心步骤与完整代码示例,涵盖环境准备、路由定义、数据校验、服务启动及调试测试方法。

    codex怎么读取word文档及docx文件操作教程
    codex怎么读取word文档及docx文件操作教程

    介绍如何利用编程工具读取和解析Word文档(docx格式),涵盖基础文本提取代码示例、结构化数据处理逻辑,以及处理复杂排版时的技术局限与替代方案。

    怎么在Python中调用C语言代码提升性能
    怎么在Python中调用C语言代码提升性能

    详细讲解在Python中调用C语言代码提升性能的完整实践指南,包含原理分析、编译步骤、ctypes与CFFI具体实现、性能对比及常见陷阱。

    Python与C语言的性能差异及底层原理
    Python与C语言的性能差异及底层原理

    深入解析Python与C语言在执行效率上的数量级差异,从编译机制、变量内存布局、动态类型推断到GIL锁,系统阐明底层核心原理。

    Python和C语言哪个更适合编程入门
    Python和C语言哪个更适合编程入门

    客观对比Python与C语言在心智负担、底层机制与学习反馈上的核心差异,提供清晰有据的选择标准与切实的入门学习路径。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

    针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

    langgraph python guide中文入门教程详解
    langgraph python guide中文入门教程详解

    本篇LangGraph Python中文入门教程详解,系统梳理StateGraph状态机定义、节点编写、边与条件路由、检查点持久化(MemorySaver)等核心机制,提供从环境安装到完整循环智能体构建的代码示例与实操指导。

    Windows 安装 Python:从官方入口到虚拟环境的可复现实践
    Windows 安装 Python:从官方入口到虚拟环境的可复现实践

    面向后端开发者,基于 Python 官方文档说明如何在 Windows 上安装 Python、创建 venv 虚拟环境及使用 pip 管理依赖。包含可复制命令、验证方法及工具选择边界,避免常见配置误区。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。