Python函数和模块的使用

我的博客

文章首发于公众号:小肖学数据分析

在开发过程中,函数和模块帮助我们将复杂的代码逻辑分解为可管理的部分,提升代码的可读性、可维护性和重用性。

本文将介绍如何在Python中有效利用函数和模块,提供详细的示例。

函数的作用

在多次执行相同或相似代码逻辑时,如果不使用函数,代码会显得冗长且重复。通过函数封装功能模块,我们可以避免这种难以维护和理解的代码。

定义函数

在Python中,我们用def关键字来定义一个函数。

# 使用def定义一个函数,计算平方
def square(number):# 返回值为参数的平方return number * number# 调用自定义函数
result = square(5)  # result的值为25
调用函数

Python有很多内置函数,可以直接调用它们,也可以通过导入模块来扩展这些功能。

# 导入math模块以使用数学相关的函数
import math# 调用math模块中的sqrt函数计算平方根
root = math.sqrt(25)  # root的值为5.0
函数的参数

函数参数的灵活性是Python函数的一大特点,包括默认参数、可变参数、关键字参数和命名关键字参数。

默认参数 (Default Arguments)

默认参数为函数的某些参数指定默认值。

# 定义一个函数,其中一个参数有默认值
def make_coffee(size, sugar=2, milk=True):# 根据参数制作咖啡coffee = f"{size} coffee"coffee += f" with {sugar} sugars" if sugar else " with no sugar"coffee += " and milk" if milk else " without milk"return coffeeprint(make_coffee("large"))  # 使用默认的糖量和牛奶
print(make_coffee("medium", milk=False))  # 不用牛奶
print(make_coffee("small", sugar=0))  # 不加糖
可变参数 (*args)

可变参数允许函数接收任意数量的参数,这些参数被封装进一个元组。

# 定义一个函数,接收任意数量的参数
def make_sandwich(bread, *fillings):# 组合三明治的配料sandwich = f"{bread} sandwich with"for filling in fillings:sandwich += f" {filling},"return sandwich[:-1]  # 移除最后的逗号print(make_sandwich("rye", "cheese", "ham", "tomato"))  # 多个填充
print(make_sandwich("whole grain"))  # 无填充
关键字参数 (**kwargs)

通过关键字参数,可以接收一个包含所有未显式接收的关键字参数的字典。

# 定义一个函数,接收任意的键值对作为参数
def make_pizza(size, **toppings):# 根据键值对准备披萨的配料pizza = f"{size} pizza with"for topping, value in toppings.items():pizza += f" {value} {topping},"return pizza[:-1]  # 移除最后的逗号print(make_pizza("large", cheese="extra", pepperoni="double", olives="yes"))
命名关键字参数

命名关键字参数要求调用者必须使用参数的名字来指定它们。

# 定义一个函数,使用命名关键字参数
def create_user(*, username, password, email):# 根据提供的名字关键字参数创建一个用户return {"username": username, "password": password, "email": email}# 正确使用命名关键字参数
user = create_user(username="alice", password="secret", email="alice@example.com")
print(user)
参数组合

在Python函数中,可以组合使用上述各种类型的参数。

# 定义一个函数,结合使用不同类型的参数
def create_profile(name, age, *hobbies, **details):# 创建用户档案profile = {"name": name, "age": age, "hobbies": hobbies}profile.update(details)return profile# 使用组合参数创建档案
profile = create_profile("Alice", 28, "hiking", "cooking", city="Seattle", email="alice@example.com")
print(profile)
函数的返回值

函数不仅可以做计算还可以返回值,包括没有返回值、返回单个值或返回多个值。

# 一个返回多个值的函数
def get_stats(numbers):# 返回最大值和最小值return max(numbers), min(numbers)# 接收返回的多个值
max_val, min_val = get_stats([1, 2, 3, 4, 5])  # max_val为5,min_val为1
作用域问题

理解Python中的作用域概念对于编写正确的代码至关重要。

# 全局变量
x = 10def change_value():# 局部变量x = 5print("Inner x:", x)change_value()  # 输出: Inner x: 5
print("Outer x:", x)  # 输出: Outer x: 10
用模块管理函数

把相关的函数组织在一起形成模块,可以帮助我们更好地组织代码结构。

# 假设这是一个名为mymodule.py的文件
def add(a, b):return a + bdef subtract(a, b):return a - b# 在其他Python文件中使用这个模块
import mymodule# 使用模块中定义的函数
result = mymodule.add(3, 4)  # result的值为7

当遇到命名冲突时,Python会根据作用域规则来决定使用哪个变量。同一个模块内的命名冲突通常会在加载时被覆盖,而不同模块间的冲突可以通过模块名来区分。

结语

掌握函数和模块的使用,可以帮助我们将复杂的逻辑简化,提高代码复用率和可读性。

希望通过本文的介绍和示例,您能更深入地理解函数和模块的概念,将这些概念应用于实际开发中。

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

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

相关文章

【C++干货铺】会搜索的二叉树(BSTree)

个人主页点击直达:小白不是程序媛 C系列专栏:C干货铺 代码仓库:Gitee 目录 前言: 二叉搜索树 二叉搜索树概念 二叉搜索树操作 二叉搜索树的查找 二叉搜索树的插入 二叉搜索树元素的删除 ​二叉搜索树的实现 BSTree结点 …

GraphicsProfiler 使用教程

GraphicsProfiler 使用教程 1.工具简介:2.Navigation介绍2.1.打开安装好的Graphics Profiler。2.2.将手机连接到计算机,软件会在手机中安装一个GraphicsProfiler应用(该应用是无界面的)。2.3.Show files list2.4.Record new trace2.4.1.Appli…

TSINGSEE视频智能解决方案边缘AI智能与后端智能分析的区别与应用

视频监控与AI人工智能的结合是当今社会安全领域的重要发展趋势。随着科技的不断进步,视频监控系统已经不再局限于简单的录像和监视功能,而是开始融入人工智能技术,实现更加智能化的监控和安全管理。传统的监控系统往往需要人工操作来进行监控…

Windows11安装python模块transformers报错Long Path处理

Windows11安装python模块transformers报错,报错信息如下 ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: C:\\Users\\27467\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\Local…

xcode 修改 target 中设备朝向崩溃

修改xcode的target中的设备朝向导致崩溃。 从日志上看好像没有什么特别的信息。 之后想了想,感觉这个应该还是跟xcode的配置有关系,不过改动的地方好像也只有plist。 就又翻腾了半天plist中的各种配置项,再把所有的用户权限提示相关的东西之…

重要通知!中国电信警告:用户须关闭路由器“双频合一”功能

在网络的无尽时空里,一场电信官方的宣战正酝酿中,目标锁定在我们日常生活中不可或缺的WiFi身上~ 最新消息曝光,竟然是路由器内藏的一个名为“双频合一”的功能引发了这场轰轰烈烈的网络风暴。 我们时常觉得WiFi就像是隐身在我们生活中的超级英…

call 和 apply:改变对象行为的秘密武器(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

IntelliJ IDEA 运行 若依分离版后端

一、本地运行 一、选择打开IntelliJ IDEA项目 二、选择若依项目 如:java123 三、等待右下角的准备工作(有进度条的)完成 四、修改MySQL 五、修改资源上传目录 六、修改redis 七、然后点击运行 八、成功图 九、测试访问 二、部署服务器运行 …

初级数据结构(五)——树和二叉树的概念

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;四&#xff09;——队列 | NULL 下一篇-> 1、树结构&#xff08;Tree&#xff09; 1.1、树结构的特点 自然界中的树由根部开始向上生长&#xff0c;随机长出分支&…

对自己的博客网站进行DOS攻击

对自己的博客网站进行DOS攻击 先说明一点,别对别人的网站进行ddos/dos攻击(dos攻击一般短时间攻击不下来),这是违法的,很多都有自动报警机制,本篇博客仅用于学习,请勿用于非法用途 安装kaili Linux 进入KALI官网,下载iso镜像文件 vmware新建虚拟机,选择自定义 点击下一步 …

ROS-ROS运行管理-工作空间覆盖;节点、话题、参数名称重名

文章目录 一、工作空间覆盖二、节点名称重名2.1 rosrun设置命名空间与重映射2.2 launch文件设置命名空间与重映射2.3 编码设置命名空间与重映射 三、话题名称设置3.1 rosrun设置话题重映射3.2 launch文件设置话题重映射3.3 编码设置话题名称 四、参数名称设置4.1 rosrun设置参数…

Github与Gitlab

学习目标 能够使用GitHub创建远程仓库并使用能够安装部署GitLab服务器能够使用GitLab创建仓库并使用掌握CI/CD的概念掌握蓝绿部署, 滚动更新,灰度发布的概念 GitHub是目前最火的开源项目代码托管平台。它是基于web的Git仓库&#xff0c;提供公有仓库和私有仓库&#xff0c;但私…

使用Go实现一个百行聊天服务器

前段时间, redis作者不是整了个c语言版本的聊天服务器嘛, 地址, 代码量拢共不过百行. 于是, 心血来潮下, 我也整了个Go语言版本. 简单来说就是实现了一个聊天室的功能. 将所有注释空行都去掉, 刚好100行实现. 废话不多说, 先上代码: package mainimport ("fmt"&quo…

SoC中跨时钟域的信号同步设计(单比特同步设计)

一、 亚稳态 在数字电路中&#xff0c;触发器是一种很常用的器件。对于任意一个触发器&#xff0c;都由其参数库文件规定了能正常使用的“建立时间”&#xff08;Setup time&#xff09;和“保持时间”&#xff08;Hold time &#xff09;两个参数。“建立时间”是指在时钟…

【MySQL学习之基础篇】多表查询

文章目录 1. 多表关系1.1. 一对多1.2. 多对多1.3. 一对一 2. 多表查询概述2.1. 数据准备2.2. 概述 3. 查询的分类3.1. 内连接查询3.2. 外连接查询3.3. 自连接3.3.1. 自连接查询3.3.2. 联合查询 3.4. 子查询3.4.1. 概述3.4.2. 标量子查询3.4.3. 列子查询3.4.4. 行子查询3.4.5. 表…

python+requests+pytest 接口自动化实现

最近工作之余拿公司的项目写了一个接口测试框架&#xff0c;功能还不是很完善&#xff0c;算是抛砖引玉了&#xff0c;欢迎各位来吐槽。 主要思路&#xff1a; ①对 requests 进行二次封装&#xff0c;做到定制化效果 ②使用 excel 存放接口请求数据&#xff0c;作为数据驱动 ③…

LeetCode(60)K 个一组翻转链表【链表】【困难】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; K 个一组翻转链表 1.题目 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xf…

Modbus转Profinet网关使用方法

Modbus转Profinet网关&#xff08;XD-MDPN100/200&#xff09;是用于将Modbus协议和Profinet协议进行转换并进行通迅的设备。Modbus转Profinet网关&#xff08;XD-MDPN100/200&#xff09;无论是新项目还是改造项目都可轻松配置完成通迅互联。 正确的安装和配置对于确保设备的正…

低代码核心能力详解:简化应用开发的新思路

低代码平台作为一种快速地应用开发解决方法&#xff0c;为中小企业实现数字化转型提供了机会。但是&#xff0c;对于一些刚开始触碰低代码平台的企业来说&#xff0c;了解其核心能力是很重要的。本文将详细分析低代码平台的核心能力&#xff0c;并在挑选低代码平台以前为中小企…

云原生之深入解析OOM和CPU节流

一、前言 使用 Kubernetes 时&#xff0c;内存不足 (OOM) 错误和 CPU 节流是云应用程序中资源处理的主要难题&#xff0c;这是为什么呢&#xff1f;云应用程序中的 CPU 和内存要求变得越来越重要&#xff0c;因为它们与云成本直接相关。通过 limits 和 requests &#xff0c;可…