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

news2024/12/23 13:42:53

文章目录

      • 🚋前言
      • 🚀一、认识函数
      • 🌈二、函数定义
      • ❤️三、函数调用
      • ⭐四、实参与形参
        • 💥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 + y
    return result

print(add(3, 4))   # 7

在这里插入图片描述

# 实现了一个计算平均数和和值的函数
def calculate(numbers):
    """
    计算给定列表的平均数和和值

    参数:
        numbers: 一个包含数字的列表

    返回值:
        一个由两个元素组成的元组:和值和平均数
    """
    total = sum(numbers)
    mean = total / len(numbers)
    return (total, mean)

❤️三、函数调用

函数名(参数)
def add(x, y):
    result = x + y
    return result

print(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 + b
    print(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 + b

result = 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 = 0
    for arg in args:
        result += arg
    return result

print(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: expression

arguments是函数的参数,可以有多个,用逗号隔开;
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.coloradmin.cn/o/1883573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot实现图片添加水印

提示&#xff1a;今日完成图片添加水印功能 后续可能还会继续完善这个功能 文章目录 目录 文章目录 前端部分 后端 Xml Controller层 Sercive层 Service实现层 Config配置层 application.properties 文件后缀名获取 常量定义 前端部分 <!DOCTYPE html> <htm…

MD5算法详解

哈希函数 是一种将任意输入长度转变为固定输出长度的函数。 一些常见哈希函数有&#xff1a;MD5、SHA1、SHA256。 MD5算法 MD5算法是一种消息摘要算法&#xff0c;用于消息认证。 数据存储方式&#xff1a;小段存储。 数据填充 首先对我们明文数据进行处理&#xff0c;使其…

ARCGIS python 裁剪栅格函数 arcpy.management.Clip

ARCGIS python 裁剪栅格函数 arcpy.management.Clip 1 功能 裁剪掉栅格数据集、镶嵌数据集或图像服务图层的一部分。 2 使用情况 基于模板范围提取部分栅格数据集&#xff0c;输出与模板范围相交的所有像素使用以 x 和 y 坐标的最小值和最大值确定的包络矩形或使用输出范围文…

全国产化飞腾模块BIOS下修复系统启动文件

1、背景介绍 全国产飞腾模块采用麒麟信安操作系统&#xff0c;当系统下面的grub.cfg文件被用户误操作导致无法启动时&#xff0c;可以在BIOS下通过U盘中备份的grub.cfg替换硬盘上原来的grub.cfg文件&#xff0c;从而实现启动。 2、操作步骤 首先进入BIOS命令行模式&#xff…

使用 Rustup 管理 Rust 版本

文章目录 安装 Rustup配置镜像源安装 Rustup 安装 RustVS Code插件创建项目代码示例 Rust 官网&#xff1a;https://www.rust-lang.org/zh-CN/Crates 包管理&#xff1a;https://crates.io/Rust 程序设计语言&#xff1a;https://kaisery.github.io/trpl-zh-cn/通过例子学 Rust…

七人互助拼团模式的深度剖析与互助精神的价值

在当下电商的浪潮中&#xff0c;七人互助拼团模式以其独特的运作方式和互助精神&#xff0c;赢得了广大消费者和商家的青睐。这一模式不仅为用户提供了优惠的购物体验&#xff0c;更在无形中培养了用户间的互助与协作精神。 一、激励机制的细致解读 七人互助拼团模式中&#x…

GPT-4o文科成绩超一本线,理科为何表现不佳?

目录 01 评测榜单 02 实际效果 什么&#xff1f;许多大模型的文科成绩竟然超过了一本线&#xff0c;还是在竞争激烈的河南省&#xff1f; 没错&#xff0c;最近有一项大模型“高考大摸底”评测引起了广泛关注。 河南高考文科今年的一本线是521分&#xff0c;根据这项评测&…

notepad++安装并打开json文件

1、notepad安装 1、首先下载Notepad.exe 2、选择简体中文安装 点击下一步 点击“我接受” 选择安装目录&#xff0c;进行下一步安装 默认下一步 选择安装 等待安装完成 点击完成 2、保存json文件 复制返回结果 先把返回结果复制出来。保存到text里面 把文件另存为json格式 3、…

代码随想录-Day44

322. 零钱兑换 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数…

Qt:8.QWidget属性介绍(focuspolicy属性-控件焦点、stylesheet属性-为控件设置样式)

目录 一、focuspolicy属性-控件焦点&#xff1a; 1.1focuspolicy属性介绍&#xff1a; 1.2设置焦点策略——setFocusPolicy()&#xff1a; 1.3获取控件的焦点策略——focusPolicy()&#xff1a; 二、stylesheet属性——为控件设置样式&#xff1a; 2.1 stylesheet属性介绍…

虚拟机网络配置(静态网络)

解决问题&#xff1a;VMware中创建centOS虚拟机后使用ifconfig没有ip地址&#xff0c;但我想在主机&#xff08;Windows&#xff09;系统下使用shell连接虚拟机从而方便后续交互。 VMware中编辑->虚拟网络编辑器 &#xff08;注意需要管理员身份不然会无法修改&#xff09;…

Python容器 之 列表--定义

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

Android Compose 十二:常用组件列表 上拉加载

列表 上拉加载 当前思路 判断 列表最后一个显示的条目 为 数据集合的长度-1 用来记录刷新状态 var refreshing by remember {mutableStateOf(false)}数据集合 val list remember{List(10){"条目》》${it}"}.toMutableStateList()}用来记录列表当前状态及状态变化…

切片的基础知识

文章目录 ● Slice 的底层实现原理&#xff1f;● array 和 Slice 的区别&#xff1f;● 拷贝大切片一定比小切片代价大吗&#xff1f;● Slice 深拷贝和浅拷贝&#xff1f;● 零切片、空切片、nil切片&#xff1f;● Slice 的扩容机制&#xff1f;● Slice 为什么不是线程安全…

HarmonyOS Next开发学习手册——Native XComponent

场景介绍 Native XComponent是XComponent组件提供在Native层的实例&#xff0c;可作为JS层和Native层XComponent绑定的桥梁。XComponent所提供的NDK接口都依赖于该实例。接口能力包括获取Native Window实例、获取XComponent的布局/事件信息、注册XComponent的生命周期回调、注…

理性决策的艺术:从购房到择偶的数学智慧;37% 规则,做出最佳决策的秘诀;用数学模型解决人生难题

在面对人生重大决策时&#xff0c;如购房或择偶&#xff0c;我们常常感到迷茫和困惑。然而&#xff0c;如果我们能够将这些看似复杂的问题简化为数学模型&#xff0c;我们就能以更加理性和系统的方式做出决策。 37%规则 1950年代&#xff0c;当时几位数学家开始研究这样一个问…

钉钉开放AI生态战略的真正价值到底是什么?很多人都没看懂

来源&#xff1a; 首席数智官 hello 大家好&#xff0c;我们是数字化领军者都在看的首席数智官。 关注我&#xff0c;每天给你讲一个商业案例。 今天我们要给你讲的是&#xff1a;钉钉开放AI大模型生态的战略意义到底是什么&#xff1f; 「谁先赢得苹果&#xff0c;谁就赢得…

C++实现简化版Qt的QObject(3):增加父子关系、属性系统

前几天写了文章&#xff1a; C实现一个简单的Qt信号槽机制 C实现简化版Qt信号槽机制&#xff08;2&#xff09;&#xff1a;增加内存安全保障 之后感觉还不够过瘾&#xff0c;Qt中的QObject体系里还有不少功能特性没有实现。为了提高QObject的还原度&#xff0c;今天我们将父子…

欢迎回家!揭秘“嫦娥六号”背后的守望者

6月25日&#xff0c;嫦娥六号返回器携带来自月背的月球样品安全着陆在内蒙古四子王旗预定区域。这是时隔3年多后&#xff0c;中国探月工程的又一关键节点任务&#xff0c;也是时隔5年多后&#xff0c;嫦娥探测器再去月球背面。 在此次任务中&#xff0c;同元软控数字伴飞团队为…

C++使用Poco库封装一个HTTP客户端类

0x00 前言 我们在使用HTTP协议获取接口数据时&#xff0c;通常需要在Header和Query中添加参数&#xff0c;还有一种就是在Body中追加XML或者JSON格式的数据。本文主要讲述使用Poco库提交HTTP Post请求的Body中附加XML格式的数据&#xff0c;JSON格式的数据类似。 0x01 HttpCl…