【Python函数编程实战】:从基础到进阶,打造代码复用利器

文章目录

      • 🚋前言
      • 🚀一、认识函数
      • 🌈二、函数定义
      • ❤️三、函数调用
      • ⭐四、实参与形参
        • 💥1. 形式参数
        • 🚲2. 实际参数
          • 🔥1. 位置参数
          • ☔2. 关键字参数
          • 🎬3. 默认参数
          • 🔥4. 可变数量参数(不定长参数)
          • 💥5. 不定长位置参数
          • ☔6. 不定长关键字参数
      • 🎬五、了解匿名函数
        • 👊六、 定义匿名函数
        • ☔2. 总结

🚋前言

在这里插入图片描述
函数在Python中扮演着至关重要的角色,它们不仅封装了代码的逻辑单元,提高了代码的复用性和模块化程度,还通过参数传递和返回值,实现了数据和结果的灵活交换。Python函数支持多种定义方式,从最基础的def关键字开始,你就能创建自定义函数,通过return语句指定函数的输出。更进一步,Python引入了匿名函数lambda,允许你在无需命名的情况下定义简短的函数表达式,非常适合处理小规模、一次性使用的功能片段。参数机制是Python函数的另一大亮点,支持位置参数、关键字参数、默认参数、可变参数等多种形式,使得函数设计更为灵活,能够应对多样化的输入需求。同时,函数的局部作用域与全局作用域的概念,以及闭包的运用,为理解和管理变量生命周期提供了清晰的框架。Python还支持高阶函数,即函数可以作为参数传递给其他函数,或是作为其他函数的返回值,这为函数式编程风格打开了大门,极大地拓展了代码的表达力和抽象层次。

🚀一、认识函数

在Python中,函数是一种可重用的代码块,用于执行特定的任务。通过将代码封装在函数中,可以使程序更加模块化、易于维护和扩展。

当我们需要在程序中执行一些重复性的任务时,可以使用函数来封装这些任务代码,然后在需要的地方调用该函数。

优势

  • 函数能够提高代码的可读性和可维护性,因为它们能够将复杂的任务分解成小块,并命名好每个部分。
  • 函数可以节省时间和减少出错率,因为它们能够避免重复编写相同的代码,从而提高开发效率。
  • 函数可以使程序更模块化,使得代码更加清晰和容易组织。

🌈二、函数定义

# Python 中定义函数的基本语法如下:
def 函数名(参数1, 参数2, ...):# 函数体return 返回值

def 是定义函数的关键字;函数名 是自己取的函数名称,应符合变量命名规则,以便调用函数时使用该名称;

参数1, 参数2, … 是需要传递给函数的零个或多个参数,多个参数之间用逗号分隔;

函数体中是实现具体功能的代码;

return 返回值: 是返回函数结果的关键字和表达式。return 后面的表达式可以是常量、变量、运算表达式等,也可以没有返回值(即不带表达式直接使用 return)。

# 计算两个数的和的函数
def add(x, y):result = x + yreturn resultprint(add(3, 4))   # 7

在这里插入图片描述

# 实现了一个计算平均数和和值的函数
def calculate(numbers):"""计算给定列表的平均数和和值参数:numbers: 一个包含数字的列表返回值:一个由两个元素组成的元组:和值和平均数"""total = sum(numbers)mean = total / len(numbers)return (total, mean)

❤️三、函数调用

函数名(参数)
def add(x, y):result = x + yreturn resultprint(add(3, 4))   # 7"""
定义了一个名为 add 的函数,接受两个参数 x 和 y,并将它们相加得到 result,最后返回结果。通过调用 add(3, 4),我们可以打印出 7。
"""

在这里插入图片描述

def calculate(numbers):"""计算给定列表的平均数和和值参数:numbers: 一个包含数字的列表返回值:一个由两个元素组成的元组:和值和平均数"""total = sum(numbers)mean = total / len(numbers)return (total, mean)"""
定义了一个名为 calculate 的函数,接受一个列表 numbers 并计算它的和值和平均数。
函数的返回值是一个由两个元素组成的元组,即和值和平均数。
同时,我们还添加了文档字符串(Docstring)来描述函数的功能、参数和返回值,以便其他开发人员更容易地理解函数的作用和使用方法。
"""numbers = [1, 2, 3, 4, 5]
total, mean = calculate(numbers)
print("总和:", total)
print("平均数:", mean)"""
总和: 15
平均数: 3.0首先定义了一个列表 numbers,然后将它作为参数传递给 calculate 函数,并使用两个变量 total 和 mean 分别接收返回的和值和平均数。最后打印出这两个变量的值。
"""

在这里插入图片描述

⭐四、实参与形参

函数参数分为实际参数(实参)和形式参数(形参),它们用于在函数定义和调用中传递数据。

在 Python 中,有三种传递实参的方式:位置参数、关键字参数和可变数量参数(不定长参数)。
位置参数是指按照形参的顺序传递实参;
关键字参数是指通过使用实参的名称将它们传递给函数;
可变数量参数(不定长参数)允许我们传递任意数量的实参。
💥1. 形式参数

形式参数也称为形参,是指在函数定义中声明的变量。即,在定义函数时使用的变量名。形参只有在函数内部可见,因此函数外部无法直接访问它们。

def greet(name):print(f"Hello, {name}!")greet("Alice")  # 输出:Hello, Alice!# 函数 greet() 中,我们定义了一个形参 name。当函数被调用时,它将使用调用语句中提供的实参将该值设置为实参。

在这里插入图片描述

🚲2. 实际参数

实际参数也称为实参,是指在函数调用中提供给函数的值。实参可以是字面常量值、变量、表达式或其他函数调用的返回值。

def add(a, b):result = a + bprint(f"The sum of {a} and {b} is {result}")add(2, 3)  # 调用函数并传入实参 2 和 3# add() 中,我们接受两个形式参数,即 a 和 b。当函数被调用时,它们将使用传递的实际参数进行赋值。

在这里插入图片描述

🔥1. 位置参数

在函数定义时,可以指定一些位置参数,这些参数的值由函数调用者提供,在函数内部通过参数名来访问它们。
位置参数的顺序很重要,因为 Python 根据其在函数定义中的位置来确定它们具有哪些值。

def add(a, b):return a + bresult = add(2, 3)  # 调用函数并传入位置参数 2 和 3
print(result)       # 输出 5

在这里插入图片描述

add() 接受两个位置参数,即 a 和 b。调用该函数时,我们需要按照函数定义中参数的顺序传递实参。在上面的示例中,我们将整数 2 和 3 作为实参传递给 add() 函数。

☔2. 关键字参数

关键字参数与位置参数不同,不需要按照函数定义中的位置传递它们。
相反,你可以通过指定参数名来将实参传递给函数。

def greet(name, message):print(f"{name}, {message}")greet(message="Hello", name="Alice")  # 通过指定参数名传递实参

在这里插入图片描述

函数 greet() 中,我们定义了两个参数:name 和 message。然后,我们调用该函数时,通过指定参数名来传递实参,不需要按照函数定义中的位置进行。在上面的示例中,我们首先将字符串 "Hello" 作为 message 参数传递,然后将字符串 "Alice" 作为 name 参数传递。

🎬3. 默认参数

在 Python 中,还可以使用默认参数来指定在调用函数时未传递参数的默认值。如果函数被调用时没有指定可选参数的值,则自动使用默认值。

def greet(name, message="Hello"):print(f"{name}, {message}")greet("Alice")                    # 使用默认参数值
greet("Bob", message="Hi there!") # 覆盖默认值

在这里插入图片描述

greet()中,我们使用默认参数来指定 message 参数的默认值为字符串 "Hello"。当函数被调用时,如果未传递 message 参数,则默认使用该值。在第一个示例中,我们仅传递了 name 参数,并且 message 参数自动使用默认值。在第二个示例中,我们通过指定参数名来覆盖默认值。

🔥4. 可变数量参数(不定长参数)

函数的可变数量参数允许我们传递任意数量的实参。有两种类型的可变数量参数:不定长位置参数不定长关键字参数

💥5. 不定长位置参数

不定长位置参数使用星号(*)表示,它允许我们传递任意数量的位置实参给函数,并将这些实参封装到一个元组中。

def add(*args):result = 0for arg in args:result += argreturn resultprint(add(2, 3))         # 输出:5
print(add(2, 3, 4, 5))   # 输出:14# 函数 add() 中,我们将参数 *args 声明为不定长位置参数。当函数被调用时,Python 将所有传递的位置实参封装到一个元组中,并将该元组分配给变量 args。
# 在函数内部,我们可以像操作普通元组一样迭代元组中的每个值,并使用它们来执行特定操作。

在这里插入图片描述

☔6. 不定长关键字参数

不定长关键字参数使用两个星号(**)表示,它允许我们传递任意数量的关键字实参给函数,并将这些实参封装到一个字典中。(注意:该字典的键是参数名,值是对应的参数值。)

def greet(**kwargs):for name, message in kwargs.items():print(f"{name}, {message}")greet(Alice="Hello", Bob="Hi there!")# 函数 greet() 中,我们将参数 **kwargs 声明为不定长关键字参数。当函数被调用时,Python 将所有传递的关键字实参封装到一个字典中,并将该字典分配给变量 kwargs。# 在函数内部,我们可以像操作普通字典一样访问字典中的每个键值对,并使用它们来执行特定操作。

在这里插入图片描述

🎬五、了解匿名函数

可以使用lambda关键字创建匿名函数。匿名函数也称为“lambda函数”,因为它们没有显示的函数名称。
Lambda函数是一种快速定义简单函数的方式,它不需要使用def关键字来定义函数,而是通过一个表达式来实现函数功能,并使用lambda关键字将其包装起来。Lambda函数通常用于需要临时定义函数的场合。

# 基本语法:
lambda arguments: expressionarguments是函数的参数,可以有多个,用逗号隔开;
expression是函数的一个表达式,用于计算返回值。
Lambda函数只能包含一个表达式,该表达式的运算结果即为该函数的返回值。
👊六、 定义匿名函数
# 使用Lambda函数求平方和
sum = lambda x, y: x**2 + y**2
print(sum(3, 4))  # 输出:25

在这里插入图片描述

☔2. 总结

ython中的匿名函数,通常被称为lambda函数,是一种简洁的函数定义方式,无需使用def关键字声明函数名。Lambda函数的名称源自λ演算,这是一种用于函数式编程的基础理论。在Python中,lambda函数主要用于定义简短的、单行表达式式的函数,通常在需要小范围、即时使用的函数场合下发挥其独特优势。

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

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

相关文章

VUE2及其生态查漏补缺

1、数据代理概括 数据代理过程相当于是进行了 vm 代理 vm_data中的属性,vm._data 是与 我们vue文件中写的 data是全等的 //创建Vue实例let data { //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。name:atguig…

选哪个短剧系统源码好:全面评估与决策指南

在短剧内容创作和分享日益流行的今天,选择合适的短剧系统源码对于构建一个成功的短剧平台至关重要。短剧系统源码不仅关系到平台的稳定性和用户体验,还直接影响到内容创作者和观众的互动质量。本文将提供一份全面的评估指南,帮助您在众多短剧…

七一建党节|热烈庆祝中国共产党成立103周年!

时光荏苒,岁月如梭。 在这热情似火的夏日, 我们迎来了中国共产党成立103周年的重要时刻。 这是一个值得全体中华儿女共同铭记和庆祝的日子, 也是激励我们不断前进的重要时刻。 103年, 风雨兼程,砥砺前行。 从嘉兴…

拓扑排序[讲课留档]

拓扑排序 拓扑排序要解决的问题是给一个有向无环图的所有节点排序。 即在 A O E AOE AOE网中找关键路径。 前置芝士! 有向图:有向图中的每一个边都是有向边,即其中的每一个元素都是有序二元组。在一条有向边 ( u , v ) (u,v) (u,v)中&…

解析QAnything启动命令过程

一.启动命令过程日志 启动命令bash ./run.sh -c local -i 0 -b hf -m Qwen-1_8B-Chat -t qwen-7b-chat。输入日志如下所示: rootMM-202203161213:/mnt/l/20230918_RAG方向/QAnything# bash ./run.sh -c local -i 0 -b hf -m Qwen-1_8B-Chat -t qwen-7b-chat From …

快钱支付股东全部股权已被质押!

根据近期工商信息,第三方支付机构快钱支付清算信息有限公司(简称“快钱支付”)实际控股方快钱金融服务(上海)有限公司(简称“快钱金融”),作为出质股权标的企业,被出质给…

Python容器 之 列表--定义

1.什么是列表呢? 列表(list)是 Python 中使用最频繁的数据类型, 在其他语言中通常叫做数组, 专门用来存储一组数据 列表,list, 使用 [ ] 列表可以存放任意多个数据 列表中可以存放任意类型的数据 列表中数据之间 使用 逗号隔开 2.列表如何定义? &#…

面向阿克曼移动机器人(自行车模型)的LQR(最优二次型调节器)路径跟踪方法

线性二次调节器(Linear Quadratic Regulator,LQR)是针对线性系统的最优控制方法。LQR 方法标准的求解体系是在考虑到损耗尽可能小的情况下, 以尽量小的代价平衡其他状态分量。一般情况下,线性系统在LQR 控制方法中用状态空间方程描…

Redis慢查询

Redis慢查询 目录 Redis慢查询慢查询配置慢日志操作返回参数介绍 Redis的慢查询就是当命令执行时间超过预定的阈值后将这条命令记录下来,与MySQL的功能类似 慢查询配置 默认阈值是10毫秒,即10000微秒 临时修改阈值为20毫秒 127.0.0.1:6379> confi…

docker配置redis主从复制

下载redis,复制redis.conf 主节点(6379) 修改redis.conf # bind 127.0.0.1 # 注释掉这里 protected-mode no # 改为no port 6379从节点(6380) 修改redis.conf bind 127.0.0.1 protected-mode no # 改为no port 6380 replicaof 172.17.0.2 6379 # 这里的ip为主节点容器的i…

Zuul介绍

Zuul 是 Netflix 开源的一个云平台网络层代理,它主要用于路由、负载均衡、中间件通信和动态路由。Zuul 本质上是一个基于 JVM 的网关,它提供了以下功能: 1.路由:Zuul 允许客户端和服务器之间的所有入站和出站请求通过一个中心化的…

深度挖掘数据资产,洞察业务先机:利用先进的数据分析技术,精准把握市场趋势,洞悉客户需求,为业务决策提供有力支持,实现持续增长与创新

在当今日益激烈的商业竞争环境中,企业想要实现持续增长与创新,必须深入挖掘和有效运用自身的数据资产。数据不仅是企业运营过程中的副产品,更是洞察市场趋势、理解客户需求、优化业务决策的重要资源。本文将探讨如何通过利用先进的数据分析技…

Python容器 之 字符串--下标和切片

1.下标(索引) 一次获取容器中的一个数据 1, 下标(索引), 是数据在容器(字符串, 列表, 元组)中的位置, 编号 2, 一般来说,使用的是正数下标, 从 0 开始 3, 作用: 可以通过下标来获取具体位置的数据. 4, 语法: 容器[下标] 5, Python 中是支持…

进程,线程,虚拟内存,交换技术

参考资料: 参考视频1https://www.bilibili.com/video/BV1Hs421M78w/?spm_id_from333.999.0.0&vd_source97411b9a8288d7869f5363f72b0d7613 参考视频2https://www.bilibili.com/video/BV1jE411W7e8/?spm_id_from333.337.search-card.all.click&vd_source…

独家首发 | Matlab实现SVM-Transformer多变量回归预测

独家首发 | Matlab实现SVM-Transformer多变量回归预测 目录 独家首发 | Matlab实现SVM-Transformer多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现SVM-Transformer多变量回归预测,SVM递归特征消除Transformer多输入单输出回归预测…

从项目中学习Bus-Off的快慢恢复

0 前言 说到Bus-Off,大家应该都不陌生,使用VH6501干扰仪进行测试的文章在网上数不胜数,但是一般大家都是教怎么去干扰,但是说如何去看快慢恢复以及对快慢恢复做出解释比较少,因此本文以实践的视角来讲解Bus-Off的快慢恢…

STM32人体心电采集系统

资料下载地址:STM32人体心电采集系统 1、项目功能介绍 此项目主要实现了以STM32为核心的人体心电采集系统软硬件的设计。软件设计过程是在STM32上移植的uCGUI做图形界面,并如实显示采集到的心电波形信号,有SD卡存储和USB数据传输功能。 2、实…

反激开关电源反馈电路相关参数选型

Vb的电压正常变化范围是:0-1V(最低0V,由于有稳压管,最高不会超过1V) Vb的电压越高,则输出占空比越大,Vb电压越低,则输出占空比越小 那么Va的正常变化范围应该是:1.4-4.…

阅读这篇文章,彻底了解响应式网页设计

随着移动设备的普及,访问网站的方式发生了翻天覆地的变化。人们不再仅仅依靠桌面机来获取信息和享受在线服务。这给网页设计带来了巨大的挑战。如何构建一个能够在各种设备上流畅运行并提供一致用户体验的网站,已经成为每个网页设计师关心的问题。此时&a…

超详细之IDEA上传项目到Gitee完整步骤

1. 注册gitee 账号密码,gitee官网地址:Gitee官网,注册完成后,登录。 2. 创建仓库,在主页左下角有新建按钮,点击新建后会进入到此页面填写仓库信息。 3. 创建完成后复制仓库地址 4. 打开IntelliJ IDEA新建或…