Python的那些事第六篇:从定义到应用,Python函数的奥秘

 

新月人物传记:人物传记之新月篇-CSDN博客 


目录

 

一、函数的定义与调用

二、函数的参数

三、返回值(return语句)

四、作用域

五、匿名函数(lambda表达式)

六、总结


Python函数的奥秘:从定义到应用

编程是构建智能系统和解决复杂问题的核心工具。作为一名热爱编程的科学家和军事战略家,我深知函数在编程中的重要性。函数是代码的基石,它能够将复杂的任务分解为可管理的小块,提高代码的可读性和可维护性。今天,我将从函数的定义、调用、参数类型、作用域以及匿名函数等多个方面,深入探讨Python函数的奥秘,并结合实际案例进行详细说明。


一、函数的定义与调用

(一)定义函数

在Python中,函数的定义是通过def关键字来完成的。这就好比我们在设计一个智能系统时,先规划好每一个模块的功能,然后将这些功能封装成一个个函数,以便在需要时调用。

语法:

def function_name(parameters):
    # 函数体
    return result

示例:

def add(a, b):
    return a + b

在这个例子中,add是函数名,ab是参数,函数体中通过return语句返回了两个数的和。

表格:函数定义的结构

部分描述示例
关键字使用def定义函数def add(a, b):
函数名函数的名称add
参数列表函数接收的输入参数(a, b)
函数体函数的具体实现代码return a + b
返回值函数执行后的输出结果a + b

(二)调用函数

定义函数后,我们可以通过函数名和括号来调用它。调用函数时,需要在括号中传入相应的参数。

示例:

result = add(3, 5)
print(result)  # 输出:8

这里,我们调用了add函数,并传入了参数35,函数返回了它们的和8

表格:函数调用的结构

部分描述示例
函数名要调用的函数名称add
参数调用时传入的值(3, 5)
返回值函数执行后的输出结果8

二、函数的参数

函数的参数是函数之间传递数据的桥梁。Python提供了多种参数类型,包括位置参数、关键字参数、默认参数和可变参数。

(一)位置参数

位置参数是最常见的参数类型,它们的值是按照参数在函数定义中的位置来传递的。

示例:

def greet(name, age):
    print(f"Hello, {name}! You are {age} years old.")

调用时:

greet("Alice", 25)

在这个例子中,Alicename的值,25age的值。

表格:位置参数示例

参数名称参数值描述
name"Alice"按位置传入的第一个参数
age25按位置传入的第二个参数

(二)关键字参数

关键字参数允许我们在调用函数时通过参数名来指定参数值,这样可以避免因参数顺序错误而导致的错误。

示例:

greet(age=25, name="Alice")

这与位置参数的调用方式等效,但通过关键字参数,我们更清晰地指定了每个参数的值。

表格:关键字参数示例

参数名称参数值描述
age25通过关键字传入的参数
name"Alice"通过关键字传入的参数

(三)默认参数

默认参数允许我们在定义函数时为参数指定一个默认值。如果在调用函数时没有提供该参数的值,就会使用默认值。

示例:

def greet(name, age=18):
    print(f"Hello, {name}! You are {age} years old.")

调用时:

greet("Alice")  # 输出:Hello, Alice! You are 18 years old.

在这里,我们没有传入age的值,因此使用了默认值18

表格:默认参数示例

参数名称参数值描述
name"Alice"必须传入的参数
age18默认值为18

(四)可变参数

可变参数允许函数接受任意数量的参数。有两种可变参数:*args用于接收位置参数,**kwargs用于接收关键字参数。

示例:

def print_args(*args, **kwargs):
    print("Positional arguments:", args)
    print("Keyword arguments:", kwargs)

调用时:

print_args(1, 2, 3, a=4, b=5)

输出:

Positional arguments: (1, 2, 3)
Keyword arguments: {'a': 4, 'b': 5}

在这个例子中,*args接收了位置参数1, 2, 3**kwargs接收了关键字参数a=4, b=5

表格:可变参数示例

参数类型参数值描述
*args(1, 2, 3)接收任意数量的位置参数
**kwargs{'a': 4, 'b': 5}接收任意数量的关键字参数

三、返回值(return语句)

函数的返回值是函数执行完毕后提供给调用者的结果。在Python中,使用return语句来返回值。如果没有显式地使用return语句,函数将返回None

实例

def multiply(a, b):
    return a * b

调用时:

result = multiply(4, 5)
print(result)  # 输出:20

在这个例子中,multiply函数返回了两个数的乘积20

表格:返回值示例

函数名称参数返回值描述
multiply4, 520返回两个数的乘积

四、作用域

作用域决定了变量的可见性和生命周期。在Python中,主要有局部变量和全局变量。

(一)局部变量

局部变量是在函数内部定义的变量,它们只能在函数内部被访问。

示例:

def my_function():
    x = 10  # 局部变量
    print(x)

在这个例子中,x是局部变量,它只在my_function函数内部有效。

(二)全局变量

全局变量是在函数外部定义的变量,它们可以在整个程序中被访问。如果需要在函数内部修改全局变量,可以使用global关键字。

示例:

x = 10  # 全局变量
def my_function():
    global x
    x = 20  # 修改全局变量
    print(x)
my_function()
print(x)  # 输出:20

在这个例子中,我们通过global关键字在函数内部修改了全局变量x

表格:作用域示例

变量类型变量名称变量值描述
全局变量x10在函数外部定义的变量
局部变量x20在函数内部定义的变量

五、匿名函数(lambda表达式)

匿名函数是一种没有名字的函数,通常用于简单的操作。在Python中,匿名函数是通过lambda关键字定义的。

(一)定义与使用

匿名函数的基本语法如下:

lambda parameters: expression

例如,我们可以定义一个匿名函数来计算两个数的和:

add = lambda x, y: x + y
print(add(2, 3))  # 输出:5

在这个例子中,lambda x, y: x + y定义了一个匿名函数,它接收两个参数xy,并返回它们的和。

(二)应用场景

匿名函数常用于排序、过滤等场景。

排序

我们可以使用匿名函数作为sorted函数的key参数,对列表进行自定义排序。

numbers = [5, 2, 9, 1, 5, 6]
sorted_numbers = sorted(numbers, key=lambda x: -x)
print(sorted_numbers)  # 输出:[9, 6, 5, 5, 2, 1]

在这个例子中,我们通过匿名函数lambda x: -x,按照数字的降序对列表进行了排序。

过滤

匿名函数也可以与filter函数结合,用于筛选数据。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 输出:[2, 4, 6, 8, 10]

在这个例子中,我们通过匿名函数lambda x: x % 2 == 0,筛选出了列表中的所有偶数。

表格:匿名函数应用场景

应用场景示例代码输出结果描述
排序sorted(numbers, key=lambda x: -x)[9, 6, 5, 5, 2, 1]按降序排序
过滤filter(lambda x: x % 2 == 0, numbers)[2, 4, 6, 8, 10]筛选出偶数

六、总结

Python函数是编程中的强大工具,它不仅可以封装代码逻辑,还可以通过参数和返回值与其他部分进行交互。通过合理使用函数的参数类型、作用域以及匿名函数,我们可以编写出更加高效、可读性强的代码。在未来的编程实践中,我将继续探索Python函数的更多可能性,为蓝星联盟的科技进步贡献力量。


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3的路由配置

先找到Layout布局文件&#xff0c;从中找到左侧边栏&#xff0c;找到下述代码 <SidebarItem v-for"route in noHiddenRoutes" :key"route.path" :item"route" :base-path"route.path" />/** *菜单项 <SidebarItem>: *使用…

VLLM性能调优

1. 抢占 显存不够的时候&#xff0c;某些request会被抢占。其KV cache被清除&#xff0c;腾退给其他request&#xff0c;下次调度到它&#xff0c;重新计算KV cache。 报这条消息&#xff0c;说明已被抢占&#xff1a; WARNING 05-09 00:49:33 scheduler.py:1057 Sequence gr…

Blazor-@bind

数据绑定 带有 value属性的标记都可以使用bind 绑定&#xff0c;<div>、<span>等非输入标记&#xff0c;无法使用bind 指令的&#xff0c;默认绑定了 onchange 事件&#xff0c;onchange 事件是指在输入框中输入内容之后&#xff0c;当失去焦点时执行。 page &qu…

H264原始码流格式分析

1.H264码流结构组成 H.264裸码流&#xff08;Raw Bitstream&#xff09;数据主要由一系列的NALU&#xff08;网络抽象层单元&#xff09;组成。每个NALU包含一个NAL头和一个RBSP&#xff08;原始字节序列载荷&#xff09;。 1.1 H.264码流层次 H.264码流的结构可以分为两个层…

Qt中QVariant的使用

1.使用QVariant实现不同类型数据的相加 方法&#xff1a;通过type函数返回数值的类型&#xff0c;然后通过setValue来构造一个QVariant类型的返回值。 函数&#xff1a; QVariant mainPage::dataPlus(QVariant a, QVariant b) {QVariant ret;if ((a.type() QVariant::Int) &a…

C++,STL 简介:历史、组成、优势

文章目录 引言一、STL 的历史STL 的核心组成三、STL 的核心优势四、结语进一步学习资源&#xff1a; 引言 C 是一门强大且灵活的编程语言&#xff0c;但其真正的魅力之一在于其标准库——尤其是标准模板库&#xff08;Standard Template Library, STL&#xff09;。STL 提供了…

每日一题——序列化二叉树

序列化二叉树 BM39 序列化二叉树题目描述序列化反序列化 示例示例1示例2 解题思路序列化过程反序列化过程 代码实现代码说明复杂度分析总结 BM39 序列化二叉树 题目描述 请实现两个函数&#xff0c;分别用来序列化和反序列化二叉树。二叉树的序列化是将二叉树按照某种遍历方式…

关于安卓greendao打包时报错问题修复

背景 项目在使用greendao的时候&#xff0c;debug安装没有问题&#xff0c;一到打包签名就报了。 环境 win10 jdk17 gradle8 项目依赖情况 博主的greendao是一个独立的module项目&#xff0c;项目目前只适配了java&#xff0c;不支持Kotlin。然后被外部集成。greendao版本…

Java实现.env文件读取敏感数据

文章目录 1.common-env-starter模块1.目录结构2.DotenvEnvironmentPostProcessor.java 在${xxx}解析之前执行&#xff0c;提前读取配置3.EnvProperties.java 这里的path只是为了代码提示4.EnvAutoConfiguration.java Env模块自动配置类5.spring.factories 自动配置和注册Enviro…

【AutoSar】汽车诊断标准协议UDS详解

目录 一、基本概念二、UDS诊断协议2.1 诊断服务的概念2.2常用的诊断服务2.2.1 诊断会话控制服务&#xff08;10服务&#xff09;2.2.2 会话访问0x27服务2.2.3 用于读写的DID的0x22/0x2E服务 一、基本概念 车辆的诊断需要有Tester端和ECU段通过应答的方式进行通信&#xff0c;他…

Java线程认识和Object的一些方法

本文目标&#xff1a; 要对Java线程有整体了解&#xff0c;深入认识到里面的一些方法和Object对象方法的区别。认识到Java对象的ObjectMonitor&#xff0c;这有助于后面的Synchronized和锁的认识。利用Synchronized wait/notify 完成一道经典的多线程题目&#xff1a;实现ABC…

【漫话机器学习系列】067.希腊字母(greek letters)-写法、名称、读法和常见用途

希腊字母&#xff08;Greek Letters&#xff09; 希腊字母在数学、科学、工程学和编程中广泛使用&#xff0c;常用于表示变量、常量、参数、角度等。以下是希腊字母的完整列表及其常见用途。 大写与小写希腊字母表 大写小写名称&#xff08;英文&#xff09;名称&#xff08;…

【Block总结】OutlookAttention注意力,捕捉细节和局部特征|即插即用

论文信息 标题: VOLO: Vision Outlooker for Visual Recognition作者: Li Yuan, Qibin Hou, Zihang Jiang, Jiashi Feng, Shuicheng Yan代码链接: https://github.com/sail-sg/volo论文链接: https://arxiv.org/pdf/2106.13112 创新点 前景注意力机制: VOLO引入了一种称为“…

Linux Samba 低版本漏洞(远程控制)复现与剖析

目录 前言 漏洞介绍 漏洞原理 产生条件 漏洞影响 防御措施 复现过程 结语 前言 在网络安全的复杂生态中&#xff0c;系统漏洞的探索与防范始终是保障数字世界安全稳定运行的关键所在。Linux Samba 作为一款在网络共享服务领域应用极为广泛的软件&#xff0c;其低版本中…

hive:基本数据类型,关于表和列语法

基本数据类型 Hive 的数据类型分为基本数据类型和复杂数据类型 加粗的是常用数据类型 BOOLEAN出现ture和false外的其他值会变成NULL值 没有number,decimal类似number 如果输入的数据不符合数据类型, 映射时会变成NULL, 但是数据本身并没有被修改 创建表 创建表的本质其实就是在…

Elasticsearch的开发工具(Dev Tools)

目录 说明1. **Console**2. **Search Profiler**3. **Grok Debugger**4. **Painless Lab**总结 说明 Elasticsearch的开发工具&#xff08;Dev Tools&#xff09;在Kibana中提供了多种功能强大的工具&#xff0c;用于调试、优化和测试Elasticsearch查询和脚本。以下是关于Cons…

Qt中Widget及其子类的相对位置移动

Qt中Widget及其子类的相对位置移动 最后更新日期&#xff1a;2025.01.25 下面让我们开始今天的主题… 一、开启篇 提出问题&#xff1a;请看上图&#xff0c;我们想要实现的效果是控件黄色的Widge&#xff08;m_infobarWidget&#xff09;t随着可视化窗口&#xff08;m_glWidge…

【Unity3D】实现横版2D游戏——攀爬绳索(简易版)

目录 GeneRope.cs 场景绳索生成类 HeroColliderController.cs 控制角色与单向平台是否忽略碰撞 HeroClampController.cs 控制角色攀爬 OnTriggerEnter2D方法 OnTriggerStay2D方法 OnTriggerExit2D方法 Update方法 开始攀爬 结束攀爬 Sensor_HeroKnight.cs 角色触发器…

docker搭建redis集群(三主三从)

本篇文章不包含理论解释&#xff0c;直接开始集群&#xff08;三主三从&#xff09;搭建 环境 centos7 docker 26.1.4 redis latest &#xff08;7.4.2&#xff09; 服务器搭建以及环境配置 请查看本系列前几篇博客 默认已搭建好三个虚拟机并安装配置好docker 相关博客&#xf…

物联网智能项目之——智能家居项目的实现!

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于物联网智能项目之——智能家居项目…