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.rhkb.cn/news/218691.html

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

相关文章

el-date-picker 选择一个或多个日期

el-date-picker可选择多个日期 type“dates” 加个s即可 <div><span>el-date-picker选择多个日期</span><el-date-pickertype"dates"v-model"dateList"placeholder"选择一个或多个日期"></el-date-picker></di…

Graphics Profiler 使用教程

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

AcWing 1250. 格子游戏(并查集)

题目链接 活动 - AcWing本课程系统讲解常用算法与数据结构的应用方式与技巧。https://www.acwing.com/problem/content/1252/ 题解 当两个点已经是在同一个连通块中&#xff0c;再连一条边&#xff0c;就围成一个封闭的圈。一般用x * n y的形式将&#xff08;x, y&#xff0…

linux性能优化-上下文切换

如何理解上下文切换 Linux 是一个多任务操作系统&#xff0c;它支持远大于 CPU 数量的任务同时运行&#xff0c;这是通过频繁的上下文切换、将CPU轮流分配给不同任务从而实现的。 CPU 上下文切换&#xff0c;就是先把前一个任务的 CPU 上下文&#xff08;CPU 寄存器和程序计数…

【网络安全技术】电子邮件安全PGP,SMIME

一、PGP&#xff08;Pretty Good Privacy&#xff09; PGP是一种邮件加密手段&#xff0c;他在发邮件一方加密&#xff0c;然后发给发送方邮件服务器&#xff0c;发送方邮件服务器再发送给接收方邮件服务器&#xff0c;然后接收方再从接收方邮件服务器pop出来&#xff0c;这整…

docker-compose单机容器编排

Dockerfile:先配置好文件&#xff0c;然后build&#xff0c;镜像-------->容器。 docker-conpose 既可以基于dockerfile,也可以基于镜像&#xff0c;一键式拉起镜像和容器。 docker-compose核心就是yml文件&#xff0c;可以定义容器的一切。通过yml配置&#xff0c;直接运行…

labelme标注json文件检查标注标签(修改imageWidth,imagePath,imageHeight)

# !/usr/bin/env python # -*- encoding: utf-8 -*- #---wzhimport os import json# 这里写你自己的存放照片和json文件的路径 json_dir =rC:\Users\Lenovo\Desktop\json3 json_files = os.listdir(json_dir

Python+Appium自动化测试之元素等待方法与重新封装元素定位方法

在appium自动化测试脚本运行的过程中&#xff0c;因为网络不稳定、测试机或模拟器卡顿等原因&#xff0c;有时候会出现页面元素加载超时元素定位失败的情况&#xff0c;但实际这又不是bug&#xff0c;只是元素加载较慢&#xff0c;这个时候我们就会使用元素等待的方法来避免这种…

flutter 代码混淆

Flutter 应用混淆&#xff1a; Flutter 应用的混淆非常简单&#xff0c;只需要在构建 release 版应用时结合使用 --obfuscate 和 --split-debug-info 这两个参数即可。 –obfuscate --split-debug-info 用来指定输出调试文件的位置&#xff0c;该命令会生成一个符号映射表。目前…

Idea执行bat使用maven打包springboot项目成docker镜像并push到Harbor

如果执行以下命令失败&#xff0c;先把mvn的-q参数去掉&#xff0c;让错误输出到控制台。 《idea配置优化、Maven配置镜像、并行构建加速打包、解决maven打包时偶尔几个文件没权限的问题》下面的使用company-repo私有仓库和阿里云镜像仓库同时使用的配置参考。 bat echo off …

超详细!大模型面经指南(附答案)

大模型应该算是目前当之无愧的最有影响力的AI技术。它正在革新各个行业&#xff0c;包括自然语言处理、机器翻译、内容创作和客户服务等&#xff0c;成为未来商业环境的重要组成部分。 截至目前大模型已超过100个&#xff0c;大模型纵横的时代&#xff0c;不仅大模型越来越卷&…

DS八大排序之冒泡排序和快速排序

前言 前两期我们已经对"插入排序"&#xff08;直接插入排序和希尔排序&#xff09; 和 "选择排序"&#xff08;直接选择排序和堆排序&#xff09;进行了详细的介绍~&#xff01;这一期我们再来详细介绍一组排序 &#xff1a;"交换排序"即耳熟能…

等等Domino 14.0FP1

大家好&#xff0c;才是真的好。 节奏确实太快了&#xff0c;有时候我深感我也追不上。 以前Notes Domino是三年磨一剑&#xff0c;也就说每三年才发一个大版本&#xff0c;从2019年开始&#xff0c;进行了高频提速&#xff0c;居然一年一个大版本&#xff01; 周末&#xf…

树莓派(Raspberry Pi)4B密码忘记了,怎么办?

树莓派长时间不用&#xff0c;导致密码忘记了&#xff0c;这可咋整&#xff1f; 第1步&#xff1a;取出SD卡 将树莓派关机&#xff0c;移除sd卡&#xff0c;使用读卡器&#xff0c;插入到你的电脑。 第2步&#xff1a;编辑 cmdline.txt 在PC上打开SD卡根目录&#xff0c;启动…

基于C/C++的rapidxml加载xml大文件 - 上部分翻译

RAPIDXML手册 版本 1.13 版权所有 &#xff08;C&#xff09; 2006&#xff0c; 2009 Marcin Kalicinski有关许可证信息&#xff0c;请参阅随附的文件许可证 .txt。 目录 1. 什么是 RapidXml&#xff1f; 1.1 依赖性和兼容性1.2 字符类型和编码1.3 错误处理1.4 内存分配1.5 …

C++相关闲碎记录(16)

1、正则表达式 &#xff08;1&#xff09;regex的匹配和查找接口 #include <regex> #include <iostream> using namespace std;void out (bool b) {cout << ( b ? "found" : "not found") << endl; }int main() {// find XML/H…

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

背景 最近在学习操作系统&#xff0c;需要从零开始搭建系统&#xff0c;由于教程中给的虚拟机搭建的方式感觉还是过于重量级&#xff0c;因此研究了一下通过 qemu 模拟器&#xff0c;配合 grub 完成启动系统的搭建。 qemu 介绍 qemu 是一款十分优秀的系统模拟器&#xff0c;…

Qt之自定义QToolTip,去掉显示动画和隐藏延时

一.效果 先来看看Qt原生QToolTip的缺点: 1.当提示内容无变化时,弹窗无法移动。只能先传个空字符串强制弹窗隐藏,然后在新位置再传个字符串。 If the text is the same as the currently shown tooltip, the tip will not move. You can force moving by first hiding the t…

【Hadoop_06】MapReduce的概述与wc案例

1、MapReduce概述1.1 MapReduce定义1.2 MapReduce优点1.3 MapReduce缺点1.4 MapReduce核心思想1.5 MapReduce进程1.6 常用数据序列化类型1.7 源码与MapReduce编程规范 2、WordCount案例实操2.1 本地测试2.2 提交到集群测试 1、MapReduce概述 1.1 MapReduce定义 MapReduce是一…

HPM6750系列--第九篇 GPIO详解(基本操作)

一、目的 在之前的博文中我们主要介绍了不同系统不同开发编译调试环境的配置和操作&#xff08;命令行方式、Visual Studio Code、Segger Embedded Studio for RISC-V&#xff09;&#xff0c;以帮助大家准备好学习环境为目的&#xff0c;但是未涉及到芯片本身以及外设的讲解。…