Python 函数 —— 代码复用的基石

news/2025/3/30 15:43:57/文章来源:https://www.cnblogs.com/FrostBoy/p/18795803

Python 函数 —— 代码复用的基石

一、函数的定义与基本语法

在 Python 中,函数是代码复用和逻辑封装的核心单元。通过 def 关键字定义函数,基本语法如下:

def function_name(parameters):"""文档字符串:描述函数功能"""# 函数逻辑return result  # 可选,默认返回None

示例:计算两数之和

def calculate_sum(a, b):"""返回两个数的和"""return a + bresult = calculate_sum(3, 5)  # 调用函数,输出8

二、参数传递的艺术

函数的灵活性很大程度上取决于参数的设计,Python 支持多种参数类型:

1. 位置参数(Positional Arguments)

最基础的参数传递方式,按定义顺序传入值:

def greet(name, age):return f"{name} is {age} years old."print(greet("Alice", 30))  # 输出:Alice is 30 years old.

2. 关键字参数(Keyword Arguments)

通过参数名指定值,打破顺序限制:

print(greet(age=25, name="Bob"))  # 输出:Bob is 25 years old.

3. 默认参数(Default Arguments)

为参数设置默认值,调用时可省略:

def greet(name, age=18):  # age默认值为18return f"{name} is {age} years old."print(greet("Charlie"))  # 输出:Charlie is 18 years old.

4. 可变参数(Arbitrary Arguments)

  • *args:接收任意数量的位置参数(元组)

    def sum_all(*args):return sum(args)print(sum_all(1, 2, 3, 4))  # 输出:10
    
  • **kwargs:接收任意数量的关键字参数(字典)

    def print_info(**kwargs):for key, value in kwargs.items():print(f"{key}: {value}")print_info(name="David", age=35, city="Shanghai")
    

三、返回值的多样性

函数通过 return 语句返回结果,支持以下类型:

1. 单值返回

最常见的形式,返回任意类型对象:

def square(x):return x ** 2  # 返回整数

2. 多值返回(元组解包)

返回多个值时,Python 默认封装为元组,可通过解包获取:

def get_user():return "Eve", 28, "Designer"  # 隐式返回元组name, age, job = get_user()  # 解包赋值
print(name, age, job)  # 输出:Eve 28 Designer

3. 无返回值(NoneType)

若省略 return 或无 return 语句,函数默认返回 None

def print_hello():print("Hello!")  # 无返回值result = print_hello()
print(result)  # 输出:None

注意None 不等于 0 或空字符串,需用 is 关键字判断:

if result is None:print("函数未返回有效结果")

四、函数的说明文档与注解

良好的文档是代码可读性的关键:

1. 文档字符串(Docstring)

在函数内部首行用三引号注释,描述功能、参数、返回值:

def calculate_avg(numbers):"""计算列表中数字的平均值参数:numbers (list): 包含数字的列表返回:float: 平均值"""return sum(numbers) / len(numbers)

通过 函数名.__doc__help(函数名) 查看文档。

2. 类型注解(Type Hints)

为参数和返回值添加类型提示(非强制,但提升可维护性):

def add(a: int, b: int) -> int:return a + b

五、变量作用域与嵌套调用

1. 局部变量 vs 全局变量

  • 局部变量:函数内部定义,仅在函数内可用。
  • 全局变量:函数外定义,需用 global 关键字声明后修改。
count = 0  # 全局变量def increment():global count  # 声明使用全局变量count += 1increment()
print(count)  # 输出:1

2. 嵌套函数(闭包)

函数内部定义函数,内部函数可访问外部函数的变量:

def outer(x):def inner(y):return x + y  # 闭包捕获x的值return inneradd_5 = outer(5)
print(add_5(3))  # 输出:8

六、Lambda 匿名函数

用于定义简短的一次性函数,语法为 lambda 参数: 表达式

# 等价于 def square(x): return x**2
square = lambda x: x ** 2
print(square(4))  # 输出:16# 结合map/filter使用
numbers = [1, 2, 3, 4]
even_squares = list(map(lambda x: x**2, filter(lambda x: x%2==0, numbers)))
print(even_squares)  # 输出:[4, 16]

总结

Python 函数是编程的基石,掌握参数设计、返回值处理、作用域和匿名函数等特性,能显著提升代码的复用性和可维护性。无论是日常脚本还是大型项目,函数都是化繁为简的关键工具。



细节决定成败!
个人愚见,如有不对,恳请斧正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/906654.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ通过代码实现交换机分发模式

首先导入rabbitMQ的依赖:<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client --><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.25.0</version></depende…

vue复基本语法

以下为你用表格形式呈现 Vue 3 基本语法:类别 语法示例 说明模板语法文本插值 <div>{{ message }}</div> 使用双大括号将数据显示在模板中属性绑定 <img :src="imageUrl" alt="示例图片"> :src 是 v-bind:src 的简写,用于动态绑定属性…

vue3-webseek网页版AI问答|Vite6+DeepSeek+Arco流式ai聊天打字效果

2025 AI实战vue3+deepseek+arcoDesign仿DeepSeek/豆包网页版AI聊天助手。 vue3-web-deepseek 实战网页PC版智能AI对话,基于vite6+vue3.5+openAI对接DeepSeek-Chat聊天对话模型。实现流动式打字返回效果、支持亮色+暗黑主题、各种代码高亮、本地会话存储等功能。🐬技术栈编码…

仓库呆滞物料堆积如山?十年的仓库主管跟我说了这五点

今天咱们聊聊一个经常让很多仓库管理者头疼的问题—— 仓库呆滞物料堆积 。 说实话,仓库呆滞物料堆得满满的,不仅占用宝贵的仓储空间,还让企业的资金周转变得紧张,真的是个大麻烦! 不过,之前我和一位拥有 十年经验的仓库主管 聊了聊,得到了很多宝贵的经验,特别是在如何…

【汇总】sqlcmd 命令选项说明-MSSQL2012

一、原始帮助D:\>sqlcmd /? Microsoft (R) SQL Server 命令行工具 版本 11.0.2100.60 NT x64 版权所有 (c) 2012 Microsoft。保留所有权利。用法: Sqlcmd [-U 登录 ID] [-P 密码][-S 服务器] [-H 主机名] [-E 可信连接][-N 加密连…

导入SpaceClaim的iges模型尺寸被放大1000倍的问题

ANSYS APDL 和 Workbench 联合仿真中,导入 Workbench 的 iges 模型尺寸被放大1000倍问题的解决方案问题 ANSYS APDL 和 Workbench 联合仿真时,导入 SpaceClaim 的 .iges 模型尺寸被放大 1000 倍数。 如 APDL 生成的尺寸为 10 mm(注:此处的 mm 是在 APDL 编码中设置的一致单…

Linux的vim编辑器

Linux的vi/vim编辑器 命令模式 编辑模式 输入模式 vi/ vim编辑器的基本操作Linux的vi/vim编辑器基本概念:vim文本编辑器,是由vi编辑器发展演变过来的文本编辑器,因其具有使用简单、功能强大、是 Linux 众多发行版的默认文本编辑器。很多人习惯将 vim 称为 vi,其实 vim 是 v…

高度场流体模拟

【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!一、原理参考这个论文:《Real-time Simulation of Large Bodies of Water with Small Scale Details》 核心是这两个公式: 我在这篇《…

Navicat将微软数据库MS-SQLServer表内容导入MySQL数据库

前言全局说明一、说明 1.1 环境: Windows 7 旗舰版 MSSQL 2012 Navicat for MySQL 10.1.7二、MySQL准备 用 Navicat 在 mysql 新建数据库,要和 MSSQL 数据库同名注意:编码也要一致2.1 mysql 新建数据 空白处新,建 test 数据库,2.2 数据库右键查看在mysql里新建数据库编码三…

深度解析:通过 AIBrix 多节点部署 DeepSeek-R1 671B 模型

本文详细介绍了如何通过 AIBrix 分布式推理平台实现 DeepSeek-R1 671B 的多节点部署。DeepSeek-R1 通过渐进式训练框架展现出优秀的逻辑推理能力 —— 在 6710 亿总参数量中,其动态激活的 370 亿参数与 128k 上下文窗口,使其在复杂任务处理中表现卓越。然而,如此庞大的模型规…

玄机靶场 第一章 应急响应-webshell查杀

玄机靶场 第一章 应急响应-webshell查杀 1.黑客webshell里面的flag flag2. 黑客使用的什么工具的shell github地址的md5 flag 哥斯拉webshell的特征3.黑客隐藏shell的完整路径的md5 flag{md5} 注 : /xxx/xxx/xxx/xxx/xxx.xxx 发现隐藏4.黑客免杀马完整路径 md5 flag 查看这是一…

玄机靶场 第一章 应急响应-Linux日志分析

玄机靶场 第一章 应急响应-Linux日志分析 1.有多少IP在爆破主机ssh的root帐号,如果有多个使用","分割 /var/log/auth.log里面存放了相关的登录信息 直接下载看根据user=root发现三个ip 网上发现神奇妙妙脚本 cat auth.log.1 | grep -a "Failed password for ro…