《Python 简易速速上手小册》第3章:Python 的函数和模块(基于最新版 Python3.12 编写)

注意:本《Python 简易速速上手小册》

核心目的在于让零基础新手「快速构建 Python 知识体系」

文章目录

    • <mark >注意:本《Python 简易速速上手小册》
    • <mark >核心目的在于让零基础新手「快速构建 Python 知识体系」
  • 3.1 函数:编写你的代码乐曲
    • 3.1.1 什么是函数?
    • 3.1.2 如何定义函数?
    • 3.1.3 如何调用函数?
    • 3.1.4 函数的返回值
    • 3.1.5 函数的文档字符串
    • 3.1.6 默认参数值
    • 3.1.7 可变数量的参数
    • 3.1.8 局部变量和全局变量
    • 3.1.9 递归函数
  • 3.2 模块:扩展你的工具箱
    • 3.2.1 什么是模块?
    • 3.2.2 如何导入模块?
    • 3.2.3 使用模块中的函数和变量
    • 3.2.4 给模块起别名
    • 3.2.5 导入模块中的特定函数或变量
    • 3.2.6 查看模块中的所有函数和变量
    • 3.2.7 创建自己的模块
  • 3.3 错误处理:找到音乐中的音符
    • 3.3.1 什么是错误处理?
    • 3.3.2 异常类型
    • 3.3.3 使用 try 和 except
    • 3.3.4 多个 except 块
    • 3.3.5 使用 else 和 finally
    • 3.3.6 抛出自定义异常
    • 3.3.7 异常处理最佳实践

当然!让我们深入研究第 3 章的 3.1 节:“函数:编写你的代码乐曲”。函数是编程的基本构建块之一,它们允许你组织代码、提高可重用性,并让你的程序更加模块化。

3.1 函数:编写你的代码乐曲

3.1.1 什么是函数?

在编程中,函数是一组用于执行特定任务或操作的指令的集合。你可以将函数看作是一个黑匣子,你向其中输入一些数据,它会执行一些操作,并返回结果。这使得代码更加有组织、易于维护,并且可以重复使用。

经常是这样的,有些功能要么是你已经写好了,别人直接就能通过调用函数名去使用;要么是别人写好了,你去调用。

3.1.2 如何定义函数?

在 Python 中,你可以使用def关键字来定义函数,后跟函数的名称、参数列表和冒号。函数的主体是缩进的代码块,用于执行特定的任务。

示例

# 定义一个 greet() 函数
def greet(name):"""一个简单的问候函数"""print(f"你好,{name}!")

这个函数叫做greet,它接受一个参数name,然后打印出问候语。

3.1.3 如何调用函数?

定义函数只是第一步,要让函数真正发挥作用,你需要调用它。调用函数意味着执行函数内的代码,并传递特定的参数(如果有的话)。

示例

# 调用函数,并传入了参数
greet("Alice")

这个示例中,我们调用了greet函数,并传递了参数"Alice"

3.1.4 函数的返回值

函数可以返回一个值,这个值可以在函数调用后被使用。使用return语句来指定函数的返回值。

示例

def add(a, b):"""将两个数字相加并返回结果"""result = a + b# 将处理后的结果,进行返回return result

这个函数接受两个参数ab,将它们相加,然后返回结果。

3.1.5 函数的文档字符串

良好的文档对于理解函数的用途非常重要。你可以在函数内部使用文档字符串(docstring)来描述函数的作用、参数和返回值。

也就是一对 """ 符号,将需要写入文档的内容包裹起来即可。

示例

def add(a, b):"""将两个数字相加并返回结果Args:a (int): 第一个数字b (int): 第二个数字Returns:int: 相加后的结果"""result = a + breturn result

文档字符串可以帮助其他开发者理解你的函数,也可以在编程中作为参考文档。

3.1.6 默认参数值

Python 允许你为函数的参数提供默认值,这意味着如果调用函数时没有提供参数值,将使用默认值。

示例

# 给 name 设置默认值
def greet(name="世界"):"""一个带有默认参数的问候函数"""print(f"你好,{name}!")

在这个示例中,如果调用greet()而不提供参数,它将默认使用"世界"作为名字。

3.1.7 可变数量的参数

有时你不确定函数将接受多少个参数。Python 允许你使用 *args**kwargs 来处理可变数量的参数。

示例

# 在 args 前面加上一个 * 号,代表参数可变
def multiply(*args):"""将所有参数相乘并返回结果"""result = 1for num in args:result *= numreturn result

这个函数接受任意数量的参数,并将它们相乘。

3.1.8 局部变量和全局变量

函数内部定义的变量称为局部变量,它们只在函数内部可见。全局变量是在函数外部定义的,可以在整个程序中访问。

示例

global_var = 10  # 全局变量def my_function():local_var = 5  # 局部变量print(global_var)  # 可以访问全局变量print(local_var)   # 可以访问局部变量my_function()
print(global_var)  # 在函数外部也可以访问全局变量

这个示例中,global_var 是全局变量,而 local_var 是函数内的局部变量。

3.1.9 递归函数

递归函数是调用自身的函数。它们通常用于解决递归问题,如计算阶乘或斐波那契数列。

怎么理解呢?就好比你去跑步,你如果能持续跑的话,身体肯定是越来越强的。

在这个过程中,第二天去跑步的身体,是在第一天已经跑完步变得更强的身体的基础上去进行的,这就是递归了,今天的自己调用了昨天的自己继续跑步 —— 是不是很好理解?!哈哈哈~

示例

def factorial(n):"""计算阶乘的递归函数"""if n == 0:return 1else:return n * factorial(n - 1)

这个函数计算阶乘,其中使用了递归调用。

这就是关于函数的详细解释。函数是编程的基础,掌握好它们将使你能够更有效地编写代码。通过实践和编写自己的函数,你将成为一个更有经验的 Python 编程者。继续前进,编写你自己的代码乐曲!


当然!让我们深入研究第3章的3.2节:“模块:扩展你的工具箱”。模块是Python编程中的重要概念,它们允许你组织和重用代码,同时还可以让你访问Python的丰富功能库。

3.2 模块:扩展你的工具箱

3.2.1 什么是模块?

模块是包含 Python 代码的文件,可以包括函数、变量和类等。Python 标准库中有许多内置模块,同时你也可以创建自己的模块来组织代码。

简单理解,就是很多别人已经实现好了的复杂功能,你直接拿来就能用。比如说,数学中很多复杂公式的实现,不需要自己来实现,只需要传入对应的参数就可以获得自己想要的结果。

3.2.2 如何导入模块?

要使用模块中的功能,你需要首先导入它。使用 import 关键字,后跟模块的名称即可。

示例

import math  # 导入数学模块

现在,你可以使用math模块中的数学函数和常量。

3.2.3 使用模块中的函数和变量

一旦导入了模块,你可以使用点号 . 来访问模块中的函数和变量。

示例

import mathresult = math.sqrt(25)  # 使用math模块中的sqrt函数计算平方根

3.2.4 给模块起别名

你可以给导入的模块起一个别名,以便更方便地使用它。

示例

import math as m  # 给math模块起别名为mresult = m.sqrt(25)  # 使用别名m来访问模块

这在模块名称很长或容易混淆时特别有用。

3.2.5 导入模块中的特定函数或变量

如果你只需要模块中的特定函数或变量,而不是整个模块,你可以使用 from 关键字来导入它们。

示例

from math import sqrt  # 仅导入math模块中的sqrt函数result = sqrt(25)  # 直接使用sqrt函数,无需使用模块名称

这可以减少名称冲突和提高代码的可读性。

3.2.6 查看模块中的所有函数和变量

你可以使用 dir() 函数来查看模块中的所有函数和变量列表。

dir 其实就是“目录”的意思。

示例

import mathfunctions_and_variables = dir(math)  # 获取math模块中的所有函数和变量列表

这将返回一个包含模块中所有名称的列表。

3.2.7 创建自己的模块

要创建自己的模块,只需创建一个包含 Python 代码的 .py 文件,并在其他地方导入它。这使你能够将代码组织成可重用的单元。

示例

创建一个名为 my_module.py 的文件,其中包含以下内容:

def greet(name):"""一个简单的问候函数"""print(f"你好,{name}!")

然后在其他文件中导入并使用它:

import my_modulemy_module.greet("Alice")  # 使用自己创建的模块

这就是模块的基本知识。

模块是 Python 编程中非常重要的概念,它们允许你将代码组织成可维护和可重用的部分。通过导入标准库模块或创建自己的模块,你可以扩展你的工具箱,让你的编程任务更加高效和有条不紊。继续探索模块,并将它们作为编程的利器!


当然!让我们深入研究第3章的3.3节:“错误处理:找到音乐中的音符”。错误处理是Python编程中不可或缺的一部分,它允许你在程序出现问题时优雅地处理异常情况。

3.3 错误处理:找到音乐中的音符

3.3.1 什么是错误处理?

错误处理是一种编程技术,用于捕获、识别和处理程序中的异常情况。异常通常是不期望的错误或问题,它们可能导致程序中断或崩溃。

3.3.2 异常类型

Python 中有许多内置的异常类型,每种类型都表示不同的错误情况。一些常见的异常类型包括:

  • SyntaxError:语法错误,通常是由于代码书写不正确引起的。
  • TypeError:类型错误,例如尝试对不兼容类型执行操作。
  • NameError:名称错误,尝试访问未定义的变量或函数。
  • ValueError:值错误,尝试使用无效的值。
  • ZeroDivisionError:除以零错误,尝试执行除法操作并除以零。

⚠️ 注意:不要背,不要背,不要背 —— 见多了,自然就熟悉。

3.3.3 使用 try 和 except

要捕获异常并进行处理,你可以使用 tryexcept 语句。代码块在 try 内执行,如果出现异常,则会跳转到匹配的 except 块。

示例

try:result = 10 / 0  # 尝试除以零
except ZeroDivisionError:print("哎呀,除以零了!")

在这个示例中,我们尝试除以零,但由于出现了 ZeroDivisionError 异常,所以程序不会崩溃,而是执行了 except 块中的代码。

3.3.4 多个 except 块

你可以为不同类型的异常指定多个 except 块,以分别处理它们。

示例

try:num = int("abc")  # 尝试将字符串转换为整数
except ValueError:print("无法将字符串转换为整数")
except TypeError:print("类型错误发生")

在这个示例中,我们处理了 ValueErrorTypeError 两种异常。

3.3.5 使用 else 和 finally

除了 tryexcept,还可以使用 else 块和 finally 块。

  • else块中的代码将在没有异常发生时执行。
  • finally块中的代码将始终执行,无论是否发生异常。

示例

try:result = 10 / 2
except ZeroDivisionError:print("哎呀,除以零了!")
else:print(f"结果是{result}")
finally:print("无论如何都会执行的代码")

在这个示例中,由于没有异常发生,所以else块中的代码会执行,然后无论如何,finally块中的代码也会执行。

3.3.6 抛出自定义异常

除了处理内置异常,你还可以抛出自定义异常,以便更好地控制程序行为。

示例

def divide(a, b):if b == 0:raise ValueError("除数不能为零")return a / btry:result = divide(10, 0)
except ValueError as e:print(f"捕获自定义异常:{e}")

在这个示例中,我们定义了一个自定义异常并在函数中抛出它。

3.3.7 异常处理最佳实践

  • 尽量只捕获你知道如何处理的异常,避免捕获所有异常。
  • 使用异常处理来增强程序的稳定性,使其能够优雅地处理问题。
  • 记录异常信息,以便在调试和维护时找到问题的根本原因。

错误处理是Python编程中的关键技能,它使你的程序更健壮,更容易调试和维护。通过理解不同类型的异常和如何处理它们,你可以提高你的代码质量并避免意外崩溃。继续编写代码,但不要忘记处理那些“音符”!

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

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

相关文章

订婚支出及共同生活消费是否属于彩礼?应否返还?

恋爱期间&#xff0c;男女双方为增进情感而互赠财物的现象十分普遍。而当双方关系结束时&#xff0c;赠送财物的一方要求对方返还时&#xff0c;法院能否支持其主张&#xff1f; 一起男方向女方及女方母亲索要彩礼及恋爱期间花销钱款引发的婚约财产纠纷案&#xff0c;法院综合双…

[力扣 Hot100]Day18 矩阵置零

题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 出处 思路 在原数组上直接操作势必会出现“冗余”的0&#xff0c;即原本[i,j]处不是0&#xff0c;例如由于i行的其他位置有0导致[i,j]…

Shell中的AWK

1.awk的工作原理 逐行读取文本&#xff0c;默认以空格或tab键为分隔符进行分隔&#xff0c;将分隔所得的各个字段保存到内建变量中&#xff0c;并按模式或者条件执行编辑命令。awk倾向于将一行分成多个"字段"然后再进行处理。awk信息的读入也是逐行读取的&#xff0…

【WPF.NET开发】优化性能:数据绑定

本文内容 如何解析数据绑定引用绑定到大型 CLR 对象绑定到 ItemsSource将 IList 绑定到 ItemsControl 而非 IEnumerable请勿仅为数据绑定而将 CLR 对象转换为 XML Windows Presentation Foundation (WPF) 数据绑定功能提供了一种简单一致的方法来呈现应用程序和与数据交互。 …

day38_MySQL

今日内容 0 复习昨日 1 引言 2 数据库 3 数据库管理系统 4 MySQL 5 SQL语言 0 复习昨日 1 引言 1.1 现有的数据存储方式有哪些&#xff1f; Java程序存储数据&#xff08;变量、对象、数组、集合&#xff09;&#xff0c;数据保存在内存中&#xff0c;属于瞬时状态存储。文件&…

删除有序数组中的重复项[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个非严格递增排列的数组nums&#xff0c;请你原地删除重复出现的元素&#xff0c;使每个元素只出现一次&#xff0c;返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。 考虑nums的唯一元素…

Source Insight 4的使用经验

问题1 函数结束提示符<<end tagDebugData>> 在source insight里的options→preference→syntax decorations→auto annotations→annotate closing braceswith end-comments关闭或启动显示. 但是有的有有的没有&#xff0c;奇怪! 参照网络答案&#xff1a; Sou…

DataX介绍

一、介绍 DataX 是一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 github地址 详细文档 操作手册 支持数据框架如下&#xff1a; 架构 Reader&#xff1…

IPV4 转 IPV6 解决方案大全

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…

App全测试扫描漏洞工具

APP 有漏洞被测要下架&#xff0c;怎么处理&#xff1f; 如题&#xff0c;今天被问到&#xff1a;市面上有什么好的 APP 漏洞扫描工具推荐&#xff1f;我们的 APP 有漏洞&#xff0c;需要下架 APP&#xff1f; 前言 事情的经过是这样的&#xff1a; 1&#xff1a;学员公司测试…

UnityShader(九)Unity中的基础光照(下)

标准光照模型 光照模型有许多种&#xff0c;但在早期游戏引擎中&#xff0c;往往只使用一个光照模型&#xff0c;被称为标准光照模型。 标准光照模型只关心直接光照&#xff0c;也就是那些直接从光源发射出来照射到物体表面后&#xff0c;经过物体表面的一次反射直接进入摄像…

在Meteor Lake上测试基于Stable Diffusion的AI应用

上个月刚刚推出的英特尔新一代Meteor Lake CPU&#xff0c;预示着AI PC的新时代到来。AI PC可以不依赖服务器直接在PC端处理AI推理工作负载&#xff0c;例如生成图像或转录音频。这些芯片的正式名称为Intel Core Ultra处理器&#xff0c;是首款配备专门用于处理人工智能任务的 …

Backtrader 文档学习- Broker - Slippage

Backtrader 文档学习- Broker - Slippage 1.概述 回测无法保证真实的市场条件。无论市场模拟有多好&#xff0c;在真实市场条件下都可能发生滑点。这意味着&#xff1a; 请求的价格可能无法与真实市场的价格匹配 集成的回测broker支持滑点。以下参数可以传递给broker &#…

Android 在WebView中加载H5传递图片

最近h5开发一个编译器&#xff0c;要在手机上显示&#xff0c;需要获取手机上的图片&#xff0c;使用webview不能直接到文件管理拿取&#xff0c;还需要对webview做处理&#xff0c;做个记录&#xff0c;方便以后使用&#xff1b; public ValueCallback<Uri[]> mUploadMe…

【安装记录】在pve中创建debian12虚拟机

1、官网下载debian12:https://www.debian.org/ 2、安装虚拟机 &#xff08;1&#xff09;上传 iso 文件到pve服务器&#xff1a; 等待上传中。。。 上传完毕结果如下&#xff1a; &#xff08;2&#xff09;创建虚拟机 类别我也不清楚有什么区别&#xff1f;我看推荐使用host…

[数据结构与算法]哈希算法

目录 哈希算法 常见哈希函数&#xff1a; MD5 (Message Digest Algorithm 5): SHA-1 (Secure Hash Algorithm 1): SHA-256 (Secure Hash Algorithm 256-bit): 代码演示: 哈希算法 哈希算法是一种将任意长度的输入数据映射为固定长度的输出数据的算法。哈希函数的主要目标是…

golang实现pdf中自动换行的表格

需要用到的库&#xff1a;jung-kurt/gofpdf 由于CellFormat方法不支持\n换行&#xff0c;会被变成乱码&#xff0c;MultiCell方法会自动将坐标定位到下一行。所以需要自己实现坐标的计算变换。通过Rect方法画出单元格&#xff0c;MultiCell方法在格内自动换行写字&#xff0c;在…

瑞_数据结构与算法_红黑树

文章目录 1 什么是红黑树1.1 红黑树的背景1.2 红黑树的特性 ★★★ 2 红黑树的Java实现2.1 红黑树颜色枚举类Color2.2 红黑树节点类Node2.2.1 实现判断是否是左孩子方法isLeftChild()2.2.2 实现查找叔叔节点方法uncle()2.2.3 实现查找兄弟节点方法sibling() 2.3 红黑树类RedBla…

GoLang中应该避免的10个错误

Go是一种静态类型的、并发的、垃圾收集的编程语言&#xff0c;由谷歌开发。近年来&#xff0c;由于它的简单性、性能和对并发的强大支持&#xff0c;它已经获得了普及。尽管它很简单&#xff0c;但开发人员在编写Go代码时仍有一些常见的错误。下面是Go语言中需要避免的十大坏错…

Python如何递归删除空文件夹

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 1.Python如何递归删除空文件夹&#xff0c;这个问题很常见。 但大多数人的解决办法都是自己实现递归函数解决这个问题&#xff0c;其实根本不用那么麻烦。 Python中的os.walk提供了一种从内到外的遍历目录树的方法&#xff…