Python学习:函数
函数定义
在Python中,函数(Function)是一组用于完成特定任务或计算的语句块。定义函数可以让我们将一段代码重用多次,提高代码的可读性和可维护性。以下是定义函数的基本语法和结构:
def function_name(parameters):"""Docstring: 函数说明文档,描述函数的功能、参数和返回值等信息"""# 函数体,实现函数的具体功能result = some_operation(parameters)return result # 可选的返回值
def
:关键字用于定义函数。function_name
:函数的名称,标识符命名规则与变量相同。parameters
:函数的参数,可以是零个或多个。参数是在函数被调用时传递给函数的值。Docstring
:用于书写函数的说明文档,建议在函数开头使用三引号(单引号或双引号)多行字符串格式书写。- 函数体:包含函数执行的代码块,实现函数的具体功能。
return
:可选项,用于返回函数的结果给调用者。
以下是一个简单的示例来说明如何定义一个简单的函数:
def greet(name):"""这个函数用于向指定的人打招呼"""return "Hello, " + name + "!"
上面定义了一个名为greet
的函数,接受一个名为name
的参数,并返回一个打招呼的消息字符串。
在Python中,函数体的缩进非常重要,用于定义函数体内的代码块范围。另外,Python中的函数也支持默认参数、可变参数等特性,使得函数更加灵活和强大。
函数调用
函数调用是指在程序中使用函数来执行特定的任务或操作。在Python中,函数调用是通过提供函数名称和必要的参数(如果有的话)来触发函数执行。下面详细解释函数调用的过程:
- 函数定义:首先,你需要定义所需的函数。函数定义包含函数名称、参数列表、函数体和返回值等内容。例如:
def greet(name):return "Hello, " + name + "!"
- 函数调用:接下来,你可以在代码中通过函数名和传递参数来调用函数。被调用的函数将会执行其中的语句并返回一个值(如果定义了返回语句)。例如:
message = greet("Alice")
print(message)
在这个例子中,我们调用了greet
函数并传递了参数"Alice"
,函数执行后返回了一个打招呼的消息字符串并赋值给message
变量,然后将这个消息打印出来。
-
参数传递:参数传递是函数调用的重要部分。在函数定义中,参数是接收函数传入数据的变量。这些参数可以是必需的,也可以是可选的(带有默认值)。根据定义的参数类型和顺序,调用函数时要传递相应的参数。
-
返回值:函数可以选择性地返回一个值。返回值是函数执行后产生的输出,可以被赋值给一个变量或者直接使用。如果函数没有明确的返回语句,它将返回
None
。
当调用函数时,程序会跳转到函数体中执行相应的操作,直到遇到return
语句,然后将控制权交还给调用方。
函数调用是利用函数完成特定任务或操作的方式。通过合适地定义和调用函数,可以提高代码的复用性和可读性,从而更高效地编写程序。
函数参数
在Python中,函数参数可以分为以下几种类型:位置参数、默认参数、可变位置参数、可变关键字参数和关键字参数。下面我会详细解释每种参数的特点和用法:
-
位置参数(Positional Arguments):
- 位置参数是指在调用函数时根据参数的位置顺序传递的参数,必须按照定义函数时的参数顺序进行传递。
- 示例:
def greet(name, age):
-
默认参数(Default Arguments):
- 默认参数是在定义函数时就指定初始值的参数。调用函数时如果没有传递具体参数,则会使用默认值。
- 示例:
def greet(name, age=30):
-
可变位置参数(Arbitrary Arguments):
- 可变位置参数允许函数接受任意数量的位置参数,这些参数会被收集成一个元组。
- 示例:
def sum_values(*args):
-
可变关键字参数(Arbitrary Keyword Arguments):
- 可变关键字参数允许函数接受任意数量的关键字参数,这些参数会被收集成一个字典。
- 示例:
def display_info(**kwargs):
-
关键字参数(Keyword Arguments):
- 关键字参数提供了参数名称和参数值之间的对应关系,用于明确指定参数取值,可以与位置参数混合使用。
- 示例:
def send_email(subject, body, to):
下面是一个结合以上所有参数种类的示例:
def example_func(name, age=30, *args, **kwargs):print("Name:", name)print("Age:", age)print("Extra positional arguments:", args)print("Extra keyword arguments:", kwargs)# 函数调用
example_func("Alice", 25, "extra1", "extra2", key1="value1", key2="value2")
在这个示例中,name
是一个位置参数,age
是一个默认参数,*args
是可变位置参数,**kwargs
是可变关键字参数。通过这些函数参数种类的组合,我们可以非常灵活地定义和调用函数,以适应不同的需求。
函数参数传递
在Python中,函数参数传递分为两种:传递不可变对象和传递可变对象。下面我会详细解释这两种情况下函数参数的传递方式:
1. 传递不可变对象(如数字、字符串、元组等)
当向函数传递不可变对象时,实际上是将对象的值传递给了函数,而函数内部对这个值的修改不会影响到原始对象。
def update_value(x): # x为不可变对象x = x + 10 # 对x进行修改,不影响原始对象value = 5
update_value(value)
print(value) # 输出结果为 5,原始对象未受影响
2. 传递可变对象(如列表、字典等)
当向函数传递可变对象时,实际上传递的是对象的引用(内存地址),因此在函数内部对这个对象的修改会影响到原始对象。
def append_value(lst): # lst为可变对象lst.append(10) # 在lst末尾添加元素,会影响原始对象my_list = [1, 2, 3]
append_value(my_list)
print(my_list) # 输出结果为 [1, 2, 3, 10],原始对象被修改
总的来说,在Python中,函数参数传递主要分为以下两点:
- 对于不可变对象,传递的是对象的值,函数内部对参数的修改不会影响原始对象。
- 对于可变对象,传递的是对象的引用,函数内部对参数的修改会影响原始对象。
理解函数参数传递的机制可以帮助我们更好地设计和调用函数,确保程序行为符合预期。
匿名函数
匿名函数在Python中也称为lambda函数,它是一种简洁的函数形式,用于定义一次性、简单的函数。与普通的函数不同,匿名函数没有函数名称,通过lambda
关键字创建,通常用来在代码中临时定义和使用简单的函数。下面我会详细解释匿名函数的语法和用法:
语法:
lambda arguments: expression
lambda
:关键字用于声明匿名函数。arguments
:参数列表,类似于普通函数。expression
:函数体,即函数要执行的操作,最后表达式的值作为返回值。
示例:
- 使用匿名函数求平方:
square = lambda x: x ** 2
print(square(5)) # 输出结果为 25
- 使用匿名函数进行加法操作:
addition = lambda a, b: a + b
print(addition(3, 4)) # 输出结果为 7
- 匿名函数作为排序的key函数:
students = [('Alice', 22), ('Bob', 19), ('Eve', 25)]
students.sort(key=lambda x: x[1]) # 按照年龄排序
print(students) # 输出结果为 [('Bob', 19), ('Alice', 22), ('Eve', 25)]
特点:
- 精简:匿名函数通常在需要一个简单的函数时使用,可以避免额外定义普通函数。
- 单行:通常用于单行表达式,不支持多条语句。
尽管匿名函数在一些情况下非常方便和实用,但由于其简洁的特性,复杂逻辑通常不适合使用匿名函数。在这种情况下,应该使用普通的具名函数来实现。
return 语句
在Python中,return
语句用于从函数中返回一个值。return
语句可以出现在函数体中的任何地方,一旦执行到return
语句,函数将立即停止执行,并返回指定的值给调用者。下面我会详细解释return
语句的用法和特点:
用法:
- 返回值:
return
语句通常用于返回函数执行的结果,这个结果可以是任何数据类型(例如整数、字符串、列表等)。
def add(a, b):return a + bresult = add(3, 5)
print(result) # 输出结果为 8
- 终止函数:
return
语句不仅用于返回值,还可以提前终止函数的执行。
def check_value(x):if x < 0:return "Value is negative"else:return "Value is positive"print(check_value(-2)) # 输出结果为 "Value is negative"
- 返回多个值:
return
语句也可以用于返回多个值,实际上返回的是一个元组,利用元组的解构赋值可以获取这些值。
def calculate(a, b):total = a + bdifference = a - breturn total, differencesum_result, diff_result = calculate(8, 3)
print(sum_result) # 输出结果为 11
print(diff_result) # 输出结果为 5
特点:
- 函数执行到
return
语句时会立即停止,并返回指定的值。 - 如果
return
语句没有指定返回值,函数将返回None
。 - 函数可以有多个
return
语句,但一般只有一个return
会被执行。 - 在函数的任何地方都可以使用
return
语句来提前终止函数的执行。
理解return
语句的作用和用法有助于控制函数的返回结果和流程。在编写函数时,合理使用return
语句可以使函数更加灵活和可靠。
强制位置参数
关注我,不迷路,共学习,同进步
关注我,不迷路,共学习,同进步
相关文章:

Python学习:函数
函数定义 在Python中,函数(Function)是一组用于完成特定任务或计算的语句块。定义函数可以让我们将一段代码重用多次,提高代码的可读性和可维护性。以下是定义函数的基本语法和结构: def function_name(parameters):&…...

docker run 使用 -p 命令一直显示端口被占用
解决办法 将 -p 换成 --net host 例如: docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /root/oneapi/data:/data justsong/one-api # 换成 docker run --name one-api -d --restart always --net...

Rust 实战练习 - 1. 输入,输出,环境变量,字符,字符串
目标: 获取程序命令行参数标准输入输出获取环境变量字符串,字符初步学习 cargo传递参数,需要加上-- use std::{env, ffi::OsString, io, io::Write};fn main() {println!("OS Env: {:?} > {:?}", env::current_dir().unwra…...

RuoYi-Vue-Plus(登录流程)
一、前端登录请求 登录按钮: src\views\login.vue 页面中登录片段,调用了handleLogin 方法,如下: @click.native.prevent="handleLogin" <el-button:loading="loading"size="medium"type="primary"style="width:100%;&qu…...

【数学】 【分数】 【字符串】972. 相等的有理数
本文涉及知识点 数学 分数 字符串 LeetCode972. 相等的有理数 给定两个字符串 s 和 t ,每个字符串代表一个非负有理数,只有当它们表示相同的数字时才返回 true 。字符串中可以使用括号来表示有理数的重复部分。 有理数 最多可以用三个部分来表示&…...

【4】DongshanPI-Seven 应用开发_文件IO
目录 1.文件IO1.1 文件IO分类1.2 查看系统调用IO用法 2. open 函数3. write 函数4. read 函数5 dup函数 1.文件IO 1.1 文件IO分类 在Linux系统中,一切都是“文件”:普通文件、驱动程序、网络通信等。所有的操作都是通过文件IO来操作的。 在Linux操作文…...

SEO 的未来:GPT 和 AI 如何改变关键词研究
谷歌Gemini与百度文心一言:AI训练数据的较量 介绍 想象一下,有一个工具不仅可以理解错综复杂的关键字网络,还可以预测搜索引擎查询的变化趋势。 这就是生成式预训练 Transformer (GPT) 和其他人工智能技术发挥作用的地方,以我们从…...

面试八股文之JAVA基础
JAVA基础 DNS、CDN?如何实现对象克隆?父子类静态代码块, 非静态代码块, 构造方法执行顺序?String s new String("abc") 创建了几个对象, 分别放到哪里?OSI网络模型七层?应用层协议?http协议和https协议区别?传输层协…...

网络连接中——长连接和短连接详解
一、TCP功能 TCP在真正开始进行数据传输之前,Server 和 Client 之间必须建立一个连接。当数据传输完成后,双方不再需要这个连接时,就可以释放这个连接。 TCP连接的建立是通过三次握手,而连接的释放是通过四次挥手。所以说,每个TCP连接的建立和释放都是需要消耗资源和时间…...

PEReDi 完全隐私的央行数字货币方案
第一个对完全隐私保护建模的方案,基于账户模型,要求交易双方都在线。 角色分类 中央银行 B B B:负责发行数字货币和货币政策,但不控制用户账户的状态,没有能力对交易的发送者或接收者进行去匿名化或披露与特定交易相…...

yolov5+pyside6+登录+用户管理目标检测可视化源码
一、软件简介 这是基于yolov5目标检测实现的源码,提供了用户登录功能界面; 用户需要输入正确的用户名和密码才可以登录。如果是超级管理员,可以修改普通用户的信息,并且在检测界面的右上角显示【管理用户】按钮。 支持图片、视频、…...

电脑如何设置个性便签 电脑个性便签分享
每次坐在电脑前,我都仿佛置身于一片信息的海洋。工作、生活、学习,方方面面的事情都需要我用心去记录。在这样一个快节奏的时代,电脑无疑成了我最得力的助手。但记事的时候,我总希望有一个既方便又有个性的工具,能让我…...

备考ICA----Istio实验12---配置双向TLS Istio Ingress Gateway实验
备考ICA----Istio实验12—配置双向TLS Istio Ingress Gateway实验 本实验部分配置延续上个Istio实验11 1. 重新配置secret 重新配置secret使其带有ca证书可以验证客户端证书是否合法 先删除原有secret,再配置新的secret # 删除原tls类型的secret kubectl -n istio-system d…...

SpringBoot 统一后端返回格式、处理全局异常
文章目录 引言I 统一标准格式1.1 定义返回标准格式1.2 定义状态码1.3 返回数据模型1.4 枚举定义1.5 Json序列化处理1.6 获取枚举字典II 处理全局异常2.1 全局异常处理器2.2 自定义异常2.3 请求数据模型III 预备知识:注解3.1 JsonInclude3.2 JsonIgnoreProperties...

C++学习基础版(一)
目录 一、C入门 1、C和C的区别 2、解读C程序 3、命名空间 4、输入输出 (1)cout输出流 (2)endl操纵符 (3)cin输入流 二、C表达式和控制语句 1、数据机构 特别:布尔类型bool 2、算数运…...

Rust 双向链表 LinkedList 和安全删除元素的方法
一、LinkedList 基本用法 在Rust中,LinkedList 是标准库中 std::collections 模块提供的一个双向链表实现。这个双向链表在每个节点中都保存了其前一个和后一个节点的引用,允许在链表的任一端进行有效的添加和移除操作。 以下是一个简单的示例…...

Android 开发中 Gradle 使用详解:构建、配置与优化技巧
文章目录 1. 基本概念2. 配置构建脚本2.1 项目级构建脚本2.2 模块级构建脚本 3. 自定义构建变体和应用 flavorDimensions4. 多模块项目4.1 创建模块4.2 配置模块依赖 5. 使用 Gradle 插件6. 使用 Gradle 命令 Gradle 是一种先进的构建工具,它被广泛应用于 Android 开…...

聚道云助力:易快报CDP无缝对接,登录同步一步到位!
一、客户介绍 某企业咨询有限公司是一家专注于为企业提供全方位、高质量咨询服务的领先机构。该公司致力于将先进的管理理念和实践经验与企业实际需求相结合,助力企业实现可持续发展。无论是战略规划、组织优化、人力资源管理,还是市场营销、财务管理等…...

Java解决幸运数字
Java解决幸运数字 01 题目 哈沙德数是指在某个固定的进位制当中,可以被各位数字之和整 除的正整数。 例如 126 是十进制下的一个哈沙德数,因为 (126)10 mod (1 2 6) 0; 126 也是8进制下的哈沙德 数,因为(126)10 (176)8,(126)10…...

将一个nextjs项目部署到vercel
注:下面均为AI创作(本人已验证该流程可行) 将一个 Next.js 项目部署到 Vercel 是一个相对直接的过程,因为 Vercel 是由同一个团队开发的,专门为 Next.js 优化。以下是部署一个 Next.js 项目到 Vercel 的基本步骤&…...

RocketMQ学习笔记:分布式事务
这是本人学习的总结,主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、分布式事务的难题2、解决方式2.1、半事务消息和事务回查2.2、代码样例2.2.1、TransactionListener2.2.2、TransactionMQProducer2.2.3、MessageListenerConcurrently2.2.4、流程图 1、分布…...

单臂路由和三层交换机
目录 一.单臂路由 1.单臂路由的工作原理 2.单臂路由的配置 2.1画出拓扑图 2.2配置PC 2.3配置交换机 2.4配置路由器 2.5测试 二.三层交换机 1.三层交换机的概述 2.三层交换机的配置 2.1画出拓扑图 2.2配置PC 2.3配置二层交换机 2.4配置三层交换机 2.5测试 3.拓展 三.总结 一.…...

红岩思维导图的制作软件,分享4款热门的!
红岩思维导图的制作软件,分享4款热门的! 在当今信息爆炸的时代,思维导图作为一种有效的知识整理和思维拓展工具,受到了广大用户的青睐。红岩思维导图以其独特的风格和实用性,成为了许多人学习和工作中的得力助手。那么…...

es 集群开机自动启动
前面搭建了 es 集群,但是每次机器重启 都需要手动启动,很麻烦,所以这里介绍一下开机自动启动 首先使用 root 用户 es : 执行以下命令 vim /etc/init.d/elasticsearch 将以下内容 cv 进去 #!/bin/bash #chkconfig: 345 63 …...

使用JMeter从JSON响应的URL参数中提取特定值
在使用Apache JMeter进行API测试时,我们经常需要从JSON格式的响应中提取特定字段的值。这可以通过使用JMeter内置的JSON提取器和正则表达式提取器来完成。以下是一个具体的例子,展示了如何从一个JSON响应中提取rowId的值,同时处理字符串终止符…...

汽车电子行业知识:自动驾驶系统结构和各模块功能
文章目录 2.自动驾驶系统结构和各模块功能2.1.自动驾驶系统结构2.2.车载传感器2.2.1.激光雷达2.2.2.毫米波雷达2.2.3.超声波雷达2.2.4.摄像头2.2.5.GNSS2.2.6. IMU2.2.7.多传感器融合 2.3.各功能模块2.3.1.高精度地图2.3.2.定位2.3.3.感知2.3.4.决策2.3.5.规划2.3.6.控制2.3.7.…...

Oracle参数文件详解
1、参数文件的作用 参数文件用于存放实例所需要的初始化参数,因为多数初始化参数都具有默认值,所以参数文件实际存放了非默认的初始化参数。 2、参数文件类型 1)服务端参数文件,又称为 spfile 二进制的文件,命名规则…...

鸿蒙(HarmonyOS)Navigation如何实现多场景UI适配?
场景介绍 应用在不同屏幕大小的设备上运行时,往往有不同的UI适配,以聊天应用举例: 在窄屏设备上,联系人和聊天区在多窗口中体现。在宽屏设备上,联系人和聊天区在同一窗口体现。 要做好适配,往往需要开发…...

PTGui图像拼接实验
1 PTGui图像拼接实验 1.1 概述 图像拼接技术就是将数张有重叠部分的图像(可能是不同时间、不同视角或者不同传感器获得的)拼成一幅无缝的全景图或高分辨率图像的技术 图像配准(image alignment)和图像融合是图像拼接的两个关键…...

C++|类封装、类的分文件编写练习:设计立方体类、点和圆的关系
文章目录 练习案例1:设计立方体类CPP代码 练习案例2:点和圆的关系CPP代码 代码总结类的分文件编写 练习案例1:设计立方体类 设计立方体类(Cube) 求出立方体的面积和体积 分别用全局函数和成员函数判断两个立方体是否相等。 CPP代码 class Cube { pub…...