当前位置: 首页 > news >正文

第3章:Python 的函数和模块(基于最新版 Python3.12 编写)

文章目录

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

相关文章:

第3章:Python 的函数和模块(基于最新版 Python3.12 编写)

文章目录 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 模块…...

网络安全产品之认识漏洞扫描设备

文章目录 一、什么是漏洞扫描设备二、漏洞扫描设备的主要功能三、漏洞扫描设备的主要技术四、漏洞扫描设备的主要类型五、漏洞扫描设备的使用方式六、漏洞扫描设备如何与其他安全设备联动七、漏洞扫描设备的应用场景 漏洞是指在硬件、软件、协议的具体实现或系统安全策略上存在…...

Hadoop增加新节点环境配置(自用)

完成Hadoop集群增添一个新的节点配置(文中命名为)Hadoop106,没有进行继续为该节点分配身份职能的步骤 1.在VMware中安装CentOS 7 新建虚拟机 1.⾸先我们创建⼀个新的虚拟机,也可以点⽂件-新建虚拟机。 2.选择⾃定义&#xff0c…...

Apache Shiro 安全框架

前言 Apache Shiro 是一个强大且容易使用的Java安全矿建,执行身份验证,授权,密码和会话管理。使用Shiro的易于理解的API您可以快速轻松的获得任何应用程序直到大的项目。 一丶什么是Shiro 1.Shiro是什么 Apache Shiro是一个强大且易于使用…...

防火墙的NAT

目录 1. NAT 概念解析 2. 配置NAT策略: 1. NAT 概念解析 静态NAT --- 一对一 动态NAT --- 多对多 NAPT --- 一对多的NAPT --- easy ip --- 多对多的NAPT 服务器映射 源NAT --- 基于源IP地址进行转换。我们之前接过的静态NAT,动态NAT,NAPT都属…...

Java基础进阶03-注解和单元测试

目录 一、注解 1.概述 2.作用 3.自定义注解 (1)格式 (2)使用 (3)练习 4.元注解 (1)概述 (2)常见元注解 (3)Target &#x…...

Mac+Android Studio配置 Flutter环境

Fluttrer中文下载官网 Flutter下载官网 1、环境变量 .zshrc #Flutter export PUB_HOSTED_URL"https://pub.flutter-io.cn" export FLUTTER_STORAGE_BASE_URL"https://storage.flutter-io.cn" export FLUTTER_HOME/Users/leon/Flutter/flutter_3_10_4/f…...

架构整洁之道-设计原则

4 设计原则 通常来说,要想构建一个好的软件系统,应该从写整洁的代码开始做起。这就是SOLID设计原则所要解决的问题。 SOLID原则的主要作用就是告诉我们如何将数据和函数组织成为类,以及如何将这些类链接起来成为程序。请注意,这里…...

数据结构(队列)

一.什么是队列 1.队列定义 队列是一种特殊的线性表,特殊之处在于他只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。和栈一样,队列也是一种操作受限制的线性表。进行插入操作的一端称为队尾,进行删除操作的…...

docker容器启动后修改或添加端口 nacos容器 版本2.x需要额外开放9848、9849

1.输入docker ps -a查看需要修改的容器ID: 记录下、 docker ps -a 2.停止docker systemctl stop docker 3.进入docker 容器文件夹,找到对应容器的位置: docker的默认文件夹应该是/var/lib/docker 如果不是root用户查看的话,可能会出现权限…...

C语言实现归并排序算法(附带源代码)

归并排序 把数据分为两段,从两段中逐个选最小的元素移入新数据段的末尾。 可从上到下或从下到上进行。 动态效果过程演示: 归并排序(Merge Sort)是一种分治算法,它将一个数组分为两个子数组,分别对这两个…...

考研C语言刷题基础篇之分支循环结构基础(二)

目录 第一题分数求和 第二题:求10 个整数中最大值 第三题:在屏幕上输出9*9乘法口诀表 第四题:写一个代码:打印100~200之间的素数 第五题:求斐波那契数的第N个数 斐波那契数的概念:前两个数相加等于第三…...

Scala基础知识

scala 1、scala简介 ​ scala是运行在JVM上的多范式编程语言,同时支持面向对象和面向函数式编程。 2、scala解释器 要启动scala解释器,只需要以下几步: 按住windows键 r输入scala即可 在scala命令提示窗口中执行:quit,即可退…...

数学建模-------误差来源以及误差分析

绝对误差:精确值-近似值; 举个例子:从A到B,应该有73千米,但是我们近似成了70千米;从C到D,应该是1373千米,我们近似成了1370千米,如果使用绝对误差,结果都是3…...

Arduino和MPLAB X 开发STM32F103和PIC16F15376

要点: 使用Arduino开发STM32F103(Blue Pill),MPLAB X 开发PIC16F15376(Curiosity Nano)C/C嵌入式开发ESP32(Arduino、ESP-IDF)和STM32实时操作系统FreeRTOS STM32使用FreeRTOS示例 在使用 FreeRTOS 时&a…...

手机操作系统Android

▶1.Android系统概述 Andaid(读[安卓)由Coosle公司和开放手机联盟共同开发,它是基于Lmx内核的开源操作系统。Andtoid主要用于移动设备,如智能手机和平板计算机。2008年发布了第一部Andtoid智能手机,以后Android逐渐扩展到平板计算机、电视、…...

2024年,你是否还在迷茫?

2024年,你是否还在迷茫? 别担心!鸿蒙来了,这个未来技术的制高点,为你提供了答案! 诸多大厂疯抢、24年预计鸿蒙相关的岗位需求将达到百万级、就业均薪达到19K,全国高校开课…… 种种现象都在表…...

ART: Automatic multi-step reasoning and tool-use for large language models 导读

ART: Automatic multi-step reasoning and tool-use for large language models 本文介绍了一种名为“自动推理和工具使用(ART)”的新框架,用于解决大型语言模型(LLM)在处理复杂任务时需要手动编写程序的问题。该框架可…...

Github 2024-01-26 开源项目日报Top10

根据Github Trendings的统计,今日(2024-01-26统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4Jupyter Notebook项目2HTML项目1Shell项目1Dockerfile项目1非开发语言项目1Go项目1Rust项目1 高级…...

免费的 UI 设计资源网站 Top 8

今日与大家分享8个优秀的免费 UI 设计资源网站。这些网站的资源包括免费设计材料站、设计工具、字体和其他网站,尤其是一些材料站。它们是免费下载的,材料的风格目前很流行,适合不同的项目。非常适合平面设计WEB/UI设计师收藏,接下…...

人机协同对人工智能治理的影响

人机协同对人工智能治理的影响是多方面的。 首先,人机协同可以提供更有效的人工智能监管和治理机制。人工智能系统通常需要大量的数据来训练和运行,而人类在监管和治理方面有独特的能力。通过人机协同,人们可以利用他们的主观意见和专业知识来…...

Form.List的使用,设置某个字段的值

1.Form.Item的name <Form.Itemname{[base_range, company_base_range_start]}dependencies{[[base_range, company_base_range_end]]}rules{[{ required: true, message: 请输入下限 },{validator: (_, value) >validateMoneyRule(value,base_range?.company_base_range…...

React16源码: React中的updateHostComponent的源码实现

updateHostComponent 1 &#xff09;概述 在 completeWork 阶段的 HostComponent 处理&#xff0c;继续前文所述在更新的逻辑里面&#xff0c;调用了 updateHostComponent进行前后props对应的dom的attributes变化的对比情况这个方法也是根据不同环境来定义的&#xff0c;我们这…...

uniapp导入uView组件库

目录 准备工作 1. 新建一个项目 2. 导入uview组件库 3. 关于SCSS 配置步骤 1. 引入uView主JS库 2. 在引入uView的全局SCSS 3. 引入uView基础样式 4. 配置easycom组件模式 添加效果实验运行即可成功 准备工作 1. 新建一个项目 2. 导入uview组件库 在进行配置之前&#x…...

防御保护----防火墙的安全策略、NAT策略实验

实验拓扑&#xff1a; 实验要求&#xff1a; 1.生产区在工作时间&#xff08;9&#xff1a;00-18&#xff1a;00&#xff09;内可以访问DMZ区&#xff0c;仅可以访问http服务器&#xff1b; 2.办公区全天可以访问DMZ区&#xff0c;其中10.0.2.10可以访问FTP服务器和HTTP服务器…...

# 安徽锐锋科技IDMS系统简介

IDMS 由安徽锐锋科技独立开发 该系统负责和海算以及UE\UNITY的无缝衔接并具备远程数据库访问、高速数据库的自动创建及数据存储、支持MQTT等多种物联网接口&#xff0c;支持多种算法。主要完成由于物料、人员、生产、故障、不良异常、订单异常带来的生产损失&#xff0c;通过海…...

Notepad在文件中查找多行相同内容的文字

Notepad在文件中查找多行相同的内容 查找&#xff1a;打开 Notepad软件&#xff0c; Ctrl F 查找 。输入关键词&#xff0c; 点击【在当前文件中查找】。 复制&#xff1a;直接在下方的【搜索结果】复制。 Notepad提取含有特定字符串的行 详情见&#xff1a; https://blog…...

Python高超音速导弹

Python高超音速导弹的全自动化开发研发具有重要性的原因如下&#xff1a; 提高研发效率&#xff1a;全自动化开发可以通过自动化工具和流程&#xff0c;快速完成各种任务&#xff0c;包括代码编写、测试、集成和部署等。这样可以大大提高研发效率&#xff0c;缩短开发周期。 减…...

Java七大排序详解

排序 排序的概念 所谓排序 &#xff0c;就是让一串记录&#xff0c;按照其中某些或者某个关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;就比如在待排序的序列中&#xff0c;存在多个具有相同关键字的记录 &#xff0c;如果经过排序这些相同的关键…...

图像旋转角度计算并旋转

#!/usr/bin/python3 # -*- coding: utf-8 -*- import cv2 import numpy as np import timedef Rotate(img, angle0.0,fill0):"""旋转:param img:待旋转图像:param angle: 旋转角度:param fill&#xff1a;填充方式&#xff0c;默认0黑色填充:return: img: 旋转后…...

股权变更要在工商局网站做吗/优化关键词排名工具

原文 我想在一个for循环中fork_join或者fork_join_none语句实现多线程, 假如我使用经典的方法: for(int index=0;index<14;index++)beginautomatic int idx=index;forkbegin`uvm_do_on(sequence_inst,p_sequencer...

删除wordpress文章日期/seo教程百度网盘

一、目的 减少操作系统安装过程中人机交互过程&#xff0c;实现选择光盘安装后&#xff0c;无需其他人机交互过程即可自动完成操作系统的安装。 二、环境和软件工具 环境&#xff1a;Linux Ubuntu/CentOS操作系统&#xff08;其他发行版未作尝试&#xff09; 软件&#xff…...

企业网站推广策略/如何学会推广和营销

2019独角兽企业重金招聘Python工程师标准>>> Checkpoint 转载于:https://my.oschina.net/u/138995/blog/213371...

长沙哪个公司做网站/百度投诉电话人工客服24小时

1、基础设施即服务 (IaaS) 基础设施即服务有时缩写为 IaaS&#xff0c;包含云 IT 的基本构建块&#xff0c;通常提供对联网功能、计算机&#xff08;虚拟或专用硬件&#xff09;以及数据存储空间的访问。基础设施即服务提供最高等级的灵活性和对 IT 资源的管理控制&#xff0c;…...

网上推广方式/乐陵seo外包公司

1.题目 一只青蛙一次可以跳1级台阶&#xff0c;也可以跳2级。求该青蛙跳n级的台阶总共有多少种跳法。 2.思路 跳0级&#xff0c;f(0)0 跳1级&#xff0c;一次跳一级一种跳法&#xff0c;f(1)1 跳2级&#xff0c;第一次跳一级和第一次跳两级两种跳法&#xff0c;f(2)2 跳3…...

专门做app的原型网站/seo教程网

好久没有写博客了&#xff0c;今天发表一篇吧&#xff1a;&#xff09;通常的在线进行表字段的增减都会造成表所&#xff0c;如果表较小还能接受&#xff0c;如果过大则这个锁持续的时间会让人比较烦恼&#xff0c;对业务持续性影响较大。Percona 提供了一款关于MySQL管理的工具…...