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中,函数调用是通过提供函数名称和必要的参数(如果有的话)来触发函数执行。下面详细解释函数调用的过程:

  1. 函数定义:首先,你需要定义所需的函数。函数定义包含函数名称、参数列表、函数体和返回值等内容。例如:
def greet(name):
    return "Hello, " + name + "!"
  1. 函数调用:接下来,你可以在代码中通过函数名和传递参数来调用函数。被调用的函数将会执行其中的语句并返回一个值(如果定义了返回语句)。例如:
message = greet("Alice")
print(message)

在这个例子中,我们调用了greet函数并传递了参数"Alice",函数执行后返回了一个打招呼的消息字符串并赋值给message变量,然后将这个消息打印出来。

  1. 参数传递:参数传递是函数调用的重要部分。在函数定义中,参数是接收函数传入数据的变量。这些参数可以是必需的,也可以是可选的(带有默认值)。根据定义的参数类型和顺序,调用函数时要传递相应的参数。

  2. 返回值:函数可以选择性地返回一个值。返回值是函数执行后产生的输出,可以被赋值给一个变量或者直接使用。如果函数没有明确的返回语句,它将返回None

当调用函数时,程序会跳转到函数体中执行相应的操作,直到遇到return语句,然后将控制权交还给调用方。

函数调用是利用函数完成特定任务或操作的方式。通过合适地定义和调用函数,可以提高代码的复用性和可读性,从而更高效地编写程序。

函数参数

在Python中,函数参数可以分为以下几种类型:位置参数、默认参数、可变位置参数、可变关键字参数和关键字参数。下面我会详细解释每种参数的特点和用法:

  1. 位置参数(Positional Arguments):

    • 位置参数是指在调用函数时根据参数的位置顺序传递的参数,必须按照定义函数时的参数顺序进行传递。
    • 示例:def greet(name, age):
  2. 默认参数(Default Arguments):

    • 默认参数是在定义函数时就指定初始值的参数。调用函数时如果没有传递具体参数,则会使用默认值。
    • 示例:def greet(name, age=30):
  3. 可变位置参数(Arbitrary Arguments):

    • 可变位置参数允许函数接受任意数量的位置参数,这些参数会被收集成一个元组。
    • 示例:def sum_values(*args):
  4. 可变关键字参数(Arbitrary Keyword Arguments):

    • 可变关键字参数允许函数接受任意数量的关键字参数,这些参数会被收集成一个字典。
    • 示例:def display_info(**kwargs):
  5. 关键字参数(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:函数体,即函数要执行的操作,最后表达式的值作为返回值。

示例:

  1. 使用匿名函数求平方:
square = lambda x: x ** 2
print(square(5))  # 输出结果为 25
  1. 使用匿名函数进行加法操作:
addition = lambda a, b: a + b
print(addition(3, 4))  # 输出结果为 7
  1. 匿名函数作为排序的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语句的用法和特点:

用法:

  1. 返回值return语句通常用于返回函数执行的结果,这个结果可以是任何数据类型(例如整数、字符串、列表等)。
def add(a, b):
    return a + b

result = add(3, 5)
print(result)  # 输出结果为 8
  1. 终止函数return语句不仅用于返回值,还可以提前终止函数的执行。
def check_value(x):
    if x < 0:
        return "Value is negative"
    else:
        return "Value is positive"

print(check_value(-2))  # 输出结果为 "Value is negative"
  1. 返回多个值return语句也可以用于返回多个值,实际上返回的是一个元组,利用元组的解构赋值可以获取这些值。
def calculate(a, b):
    total = a + b
    difference = a - b
    return total, difference

sum_result, diff_result = calculate(8, 3)
print(sum_result)  # 输出结果为 11
print(diff_result)  # 输出结果为 5

特点:

  • 函数执行到return语句时会立即停止,并返回指定的值。
  • 如果return语句没有指定返回值,函数将返回None
  • 函数可以有多个return语句,但一般只有一个return会被执行。
  • 在函数的任何地方都可以使用return语句来提前终止函数的执行。

理解return语句的作用和用法有助于控制函数的返回结果和流程。在编写函数时,合理使用return语句可以使函数更加灵活和可靠。

强制位置参数

关注我,不迷路,共学习,同进步

关注我,不迷路,共学习,同进步

在这里插入图片描述

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

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

相关文章

Web3:探索区块链与物联网的融合

引言 随着科技的不断发展&#xff0c;区块链技术和物联网技术都成为了近年来备受瞩目的前沿技术。而当这两者结合在一起&#xff0c;将产生怎样的化学反应呢&#xff1f;本文将深入探讨Web3时代中区块链与物联网的融合&#xff0c;探索其意义、应用场景以及未来发展趋势。 1. …

操作系统原理-模拟动态分区首次适应分配和回收算法——沐雨先生

一、实验题目&#xff1a; 模拟动态分区首次适应分配和回收算法 二、实验目的&#xff1a; 通过本实验&#xff0c;可加深理解动态分区分配、回收程序的功能和具体实现&#xff0c;特别是对回收分区的合并的理解。 三、实验环境&#xff1a; 1、硬件&#xff1a;PC机及其兼容…

『Apisix安全篇』探索Apache APISIX身份认证插件:从基础到实战

&#x1f4e3;读完这篇文章里你能收获到 &#x1f6e0;️ 了解APISIX身份认证的重要性和基本概念&#xff0c;以及如何在微服务架构中实施API安全。&#x1f511; 学习如何使用APISIX的Key Authentication插件进行API密钥管理&#xff0c;包括创建消费者和路由。&#x1f504;…

Python 全栈体系【四阶】(十九)

第五章 深度学习 一、基本理论 4. 神经网络的改进 4.3 循环神经网络 4.3.1 标准 CNN 模型的不足 假设数据之间是独立的。标准 CNN 假设数据之间是独立的&#xff0c;所以在处理前后依赖、序列问题&#xff08;如语音、文本、视频&#xff09;时就显得力不从心。这一类数据…

Eigen之norm函数

向量的范数是一个将向量映射到非负实数的函数,通常表示为 ||x||。它是向量空间中的一种度量,用来衡量向量的大小或长度。范数满足以下性质: 非负性:对于任意向量 x,范数 ||x|| 大于等于零,且当且仅当 x 是零向量时等于零。齐次性:对于任意标量 α,范数 ||αx|| 等于 α…

2.Wireshark使用实训——分析FTP包

1&#xff0e;实训目的 掌握Wireshark的基本使用方法&#xff0c;具备Wireshark数据包内容的简单分析能力。 2&#xff0e;应用环境 某公司为了保障网络环境安全&#xff0c;需要使用Wireshark对网络中的数据包进行分析。 3&#xff0e;实训设备 安装有eNSP的计算机。 4&…

电机控制杂谈——永磁同步电机中的永磁体谐波反电势

1.问题的引出 在我的谐波抑制专题中&#xff0c;讲了三种谐波抑制的策略。当时是通过增大逆变器死区来产生较大的谐波。但是在实际电机里面&#xff0c;我感觉死区的影响基本上没有。。。课题组的驱动器中&#xff0c;逆变器的非线性其实基本可以忽略不计了。 但是&#xff0…

Vuex笔记

Vuex vuex 是实现数据集中式状态管理的插件。数据由 vex 统一管理。其它组件都去使用 vuex 中的数据。只要有其中一个组件去修改了这个 共享的数据&#xff0c;其它组件会同步更新。 多个组件之间依赖于同一状态。来自不同组件的行为需要变更同一状态。 环境搭建 1、vue2安…

YOLOv9改进策略:block优化 | ECVBlock即插即用的多尺度融合模块,助力小目标涨点 | 顶刊TIP 2023 CFPNet

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;ECVBlock即插即用的多尺度融合模块&#xff0c;助力检测任务有效涨点&#xff01; yolov9-c-EVCBlock summary: 1011 layers, 68102630 parameters, 68102598 gradients, 252.4 GFLOPs 改进结构图如下&#x…

5个便宜的OV通配符SSL证书品牌

在当今互联网时代&#xff0c;网络安全、数据安全备受关注&#xff0c;作为网站拥有者&#xff0c;保护用户隐私数据安全变得越来越重要。其中&#xff0c;SSL证书是保障网站传输数据安全的关键&#xff0c;而在众多的选择中&#xff0c;OV通配符SSL证书以其验证显示企业身份、…

小林制药含红曲成分保健品疑致2死106人住院:红曲究竟是何方神圣?

一、红曲引发公众担忧二、红曲的生成及其特性三、红曲对人体的潜在风险四、小林制药及其在中国市场的产品情况 参考资料&#xff1a;三好夫人养生网 一、红曲引发公众担忧 近日&#xff0c;小林制药的一款含有红曲成分的保健品被疑似引发严重健康风险&#xff0c;导致两人死亡…

AutoCAD 2024 for Mac/Win:重塑设计绘图新纪元,引领行业变革先锋

在数字化时代的浪潮中&#xff0c;设计绘图工具的发展日新月异&#xff0c;AutoCAD 2024作为一款集创新、高效、智能于一体的CAD设计绘图软件&#xff0c;正以其卓越的性能和人性化的操作体验&#xff0c;引领着行业变革的新潮流。 AutoCAD 2024不仅继承了前代版本的优秀基因&…

【zip技巧】4种方法,删除ZIP压缩包密码

之前给大家介绍了zip压缩包加密方法&#xff0c;那么zip压缩包取消密码&#xff0c;大家了解多少呢&#xff1f;有密码的情况下&#xff0c;有哪些方法可以取消密码&#xff1f;无密码又该如何取消密码&#xff1f;今天总结四个方法分享给大家。 一、 最原始的方法&#xff0…

vue3 引入svg 图片的详细方法

我们都知道 svg 文件比图片小的多&#xff0c;可以节省很多空间&#xff0c;这对页面性能来说是个很大的提升。 下面介绍一下 vue3 项目中使用 svg 的详细方法&#xff1a; &#xff08;1&#xff09;安装依赖插件 npm install vite-plugin-svg-icons -D&#xff08;2&#x…

Springboot整合瀚高

需要下载highgo驱动,然后将jar包打入进自己本地maven中 下载地址: highgi6.2.4 1.打开jar包所在的文件&#xff0c;然后在该文件夹中打开命令窗口&#xff08;或者先打开命令窗口&#xff0c;然后cd到jar所在文件夹&#xff09; install-file -Dfile&#xff1a;jar包名Dart…

java 面向对象入门

类的创建 右键点击对应的包&#xff0c;点击新建选择java类 填写名称一般是名词&#xff0c;要知道大概是什么的名称&#xff0c;首字母一般大写 下面是创建了一个Goods类&#xff0c;里面的成员变量有&#xff1a;1.编号&#xff08;id&#xff09;&#xff0c;2.名称&#x…

微信小程序页面制作练习——制作一个九宫格导航图

要求&#xff1a; 代码实现&#xff1a; 先将所需要的资源图片存入我的image文件里面 模拟练习供参考&#xff0c;不建议这样存入image里&#xff0c;因为本地图片占内存太大&#xff0c;不能预览。 一、list.wxml里面搭建框架代码&#xff1a; <!--pages/list/list.wxml…

基于朴素贝叶斯算法和vue分离式架构的新闻数据情感分析可视化

基于朴素贝叶斯算法和vue分离式架构的新闻数据情感分析可视化 作品简介一、技术栈二、功能三、系统展示 作品简介 在本篇博客中&#xff0c;我将带您探索一个基于Python的新闻数据分析项目&#xff0c;其中涉及爬虫、可视化、情感分析等多种技术&#xff0c;并通过整合Django和…

阿里云 -- 连接云服务器ECS、管理云服务器ECS、WordPress 页面配置

连接云服务器ECS 1. 远程连接云服务器ECS&#xff0c;点击实例最右侧操作列的远程连接按钮&#xff0c;并在弹出的对话框中点击立即登录 2. 登录云服务器ECS&#xff0c;通过密码认证方式&#xff0c;输入用户名和密码 提示&#xff1a;新创建的ECS实例状态即使为运行中&#…

【AutoML】一个用于图像、文本、时间序列和表格数据的AutoML

一个用于图像、文本、时间序列和表格数据的AutoML AutoGluon介绍安装AutoGluon快速上手 参考资料 AutoGluon自动化机器学习任务&#xff0c;使您能够在应用程序中轻松实现强大的预测性能。只需几行代码就可以训练和部署有关图像&#xff0c;文本&#xff0c;时间序列和表格数据…