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就像是隐身在我们生活中的超级英…

【Unity编辑器】使用AssetDatabase创建、删、改、加载资源

AssetDatabase是Unity编辑器环境下的一种API,主要用于在代码中对项目中的资源进行管理和操作。注意:AssetDatabase的这些方法只能在Unity编辑器环境下运行,不能在构建后的游戏中使用。在游戏运行时,你需要使用其他资源加载方法&am…

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

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

类加载的过程

类加载是Java虚拟机(JVM)在运行时加载字节码的过程。这个过程包括类的加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)和初始化(Initializatio…

IntelliJ IDEA 运行 若依分离版后端

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

第4章-第2节-Java中的数组相关知识点

1、一维数组 1)、数组使用过程中可能出现的问题 常见的运行时异常: 1).java.lang.ArrayIndexOutOfBoundsException: 数组下标越界异常 2).java.lang.NullPointerException: 空指针异常 2)、参数传递 两种…

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

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

开源数据集下载地址

cvmart https://www.cvmart.net/dataSets 目标检测&#xff1a;https://www.cvmart.net/dataSets/detail/707人脸识别&#xff1a;https://www.cvmart.net/dataSets/detail/888CIFAR&#xff1a;https://www.cvmart.net/dataSets/detail/774 voc yolo代码中data目录&#x…

汇编语言学习(1)

更好的阅读体验&#xff0c;请点击 汇编语言学习 | YinKais Blog 简介 我为什么要学汇编 因为想在寒假手写一下操作系统玩玩&#xff0c;所以提前学一学汇编&#xff0c;到时候放假就可以直接上手写了。 什么是汇编语言 由于处理器只能理解机器语言指令&#xff0c;即 0 和…

第十七章 : Spring Boot 集成RabbitMQ(一)

第十七章 : Spring Boot 集成RabbitMQ(一) 前言 本章介绍RabbitMQ的核心概念和消息中间件中非常重要的协议——AMQP协议,然后介绍Direct、Topic、Headers、Fanout等交换机的作用和特点;RabbitMQ的五种消息发送模式-简单队列、工作队列、发布订阅、路由、广播;以及Rabbi…

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

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

C#基础——面向对象(封装 继承 多态)

C# 属于面向对象编程&#xff0c;所谓"万物皆对象"。 面向对象编程的三大特性&#xff1a;封装、继承、多态。 1、封装&#xff1a;封装是一种将数据和方法包含在类中的机制&#xff0c;以避免外部代码直接访问和修改类的内部数据。可以使用访问修饰符&#xff08;…

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

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

Redis部署文档

Redis部署文档 简介 这份文档旨在指导如何在Docker环境中部署Redis。 步骤 1. 安装Docker和Docker Compose 确保在部署之前已经安装了Docker和Docker Compose。 2. 创建Docker Compose文件 在项目根目录创建一个docker-compose.yaml文件&#xff0c;并将以下内容复制到文…

[笔记] wsl2 下使用 qemu/grub 模拟系统启动(多分区)

首先创建一块虚拟硬盘: dd bs512 count204800 if/dev/zero ofhd.img然后使用 losetup -f 将其关联为本地回环设备 losetup -f hd.img # 关联 hd.img 到空闲回环设备上 losetup -a /dev/loop0: [2080]:409 (/root/code/demo05/hd.img) # 查看刚刚关联到了哪里,这里关联到了 /d…