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 的基本步骤&…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...

uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...

spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...

02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...