当前位置: 首页 > news >正文

python语言进阶之函数

目录

前言

函数的创建和调用

函数创建

调用函数

参数传递

形式参数和实际参数

位置参数

数量必须与定义时一致

位置必须与定义时一致

关键字参数

为参数设置默认值

可变参数

**parameter

返回值

变量的作用域

局部变量

全局变量

匿名函数


前言

提到函数,大家可能会想到数学函数,函数是数学中最重要的一个模块,贯穿整个数学。在Python中,函数的应用非常广泛。在前面我们已经多次接触过函数。例如,用于输出的print()函数、用于输入的input()函数,以及用于生成一系列整数的range()函数。但这些都是Python 内置的标准函数,可以直接使用。除了可以直接使用的标准函数之外,Python还支持自定义函数,即通过将一段有规律的、重复的代码定义为函数,以达到一次编写、多次调用的目的。使用函数可以提高代码的重复利用率。

函数的创建和调用

函数创建

创建函数也称为定义函数,可以理解为创建一个具有某种用途的工具。使用 def 关键字实现。

语法格式如下:

def functionname([parameterlist]):

["comments"]

[functionbody]

其中:functionname为函数名称,在调用函数时使用,parameterlist为可选参数,用于指定想函数中传递的参数,如果有多个参数,则各参数间使用逗号‘,’分割,如果不指定,则表示该函数没有参数,在调用时,也不指定参数,"comments"为可选参数,表示为函数指定注释,也称为文档字符串,其内容通常是说明该函数的功能、要传递的参数的作用等,可以为用户提供油耗提示和帮助的内容。Functionbody为可选参数,用于指定函数体,即该函数被调用后,要执行的功能代码。如果函数有返回值,可以使用return语句返回。

举例:

def result(a,b):"""功能:用于计算a和b之间的计算结果a和b为输入的数字"""return a*b+a

这样我们就完成了函数的创建,接下来我们看如何调用函数。

调用函数

调用函数也就是执行函数。如果把创建的函数理解为创建一个具有某种用途的工具,那么调用函数就相当于使用该工具。

语法格式如下:

functionname([parametersvalue])

其中,functionname为函数名称,要调用的函数名称必须是已经创建好的,parametersvalue为可选参数,用于指定各个参数的值,如果需要传递多个参数值,则各参数值间使用逗号分割,如果该函数没有参数,则直接写一对小括号即可。

举例:

调用上述创建的result函数

def result(a,b):"""功能:用于计算a和b之间的计算结果a和b为输入的数字"""return a*b+aprint(result(4,9))

运行结果如下:

参数传递

在调用函数时,大多数情况下,主调函数和被调用函数之间有数据传递关系,这就是有参数的函数形式。函数参数的作用是传递数据给函数使用,函数利用接收的数据进行具体的操作处理。

形式参数和实际参数

在使用函数时,经常会用到形式参数和实际参数。它们都被叫作参数,下面将先通过形式参数与实际参数的作用来讲解二者之间的区别。

形式参数和实际参数在作用上的区别如下:

形式参数:在定义函数时,函数名后面括号中的参数为形式参数

实际参数:在调用一个函数时,函数名后面括号中的参数为实际参数,也就是将函数的调用者提供给函数的参数。

函数定义时参数列表中的参数就是形式参数,而函数调用时传递进来的参数就是实际参数,就像剧本选主角一样,剧本的角色相当于形式参数,而演角色的演员就相当于实际参数。

举例:

#定义函数tool
def tool(list):str = '我叫%s,我今年%d岁了。'print(str%list)
#声明变量
a = ('小明',7)
b = ('小刚',8)
#调用函数
tool(a)
tool(b)

运行结果如下:

位置参数

位置参数也称必备参数,必须按照正确的顺序将其传到函数中,即调用时的数量和位置必须和定义时是一样的。

数量必须与定义时一致

在调用函数时,指定的实际参数的数量必须与形式参数的数量一致,否则将抛出TypeError 异常,提示缺少必要的位置参数。

例如上面例子中,调用函数tool()时,传递两个参数:

位置必须与定义时一致

在调用函数时,指定的实际参数的位置必须与形式参数的位置一致,否则将产生以下两种结果。

抛出异常信息

抛出TypeEror 的异常信息,其主要原因在于,实际参数的类型与形式参数的类型不一致,并且在函数中,这两种类型不能正常转换。

举例:

#定义函数tool
def tool(a,b,c):print('我的名字叫:'+a,'我的年龄是'+str(b),'岁,我的成绩是'+str(c))
#调用函数
tool(7,'小明',98)

运行结果如下:

产生的结果与预期不符

在调用函数时,如果指定的实际参数与形式参数的位置不一致,但是他们的数据类型一致,那么就不会抛出异常,而是产生结果与预期不符的问题。

举例:

#定义函数tool
def tool(a,b,c):print('我的名字叫:'+a,'我的年龄是'+str(b),'岁,我的成绩是'+str(c))
#调用函数
tool('小明',98,7)

运行结果如下:

关键字参数

关键字参数是指使用形式参数的名字来确定输入的参数值。通过该方式指定实际参数时,不再需要与形式参数的位置完全一致。只要将参数名写正确即可。这样可以避免用户需要牢记参数位置的麻烦,使得函数的调用和参数传递更加灵活方便。

举例:

#定义函数tool
def tool(a,b,c):print('我的名字叫:'+a,'我的年龄是'+str(b),'岁,我的成绩是'+str(c))
#调用函数
tool(b = 7,a = '小明',c = 98)

运行结果如下:

为参数设置默认值

调用函数时,如果没有指定某个参数,则将会抛出异常。为了解决这个问题,我们可以为参数设罗默认值,即在定义函数时,直接指定形式参数的默认值。这样,当没有传入参数时,可以直接使用定义函数时设置的默认值。

def functionname(.,[parameter1 = defaultvalue1]):

[functionbody]

其中,functionname为函数名称,在调用函数时使用,parameter1 = defaultvalue1为可选参数,用于指定向函数中传递的参数,并且为该参数设置默认值为defaultvalue1,functionbody为可选参数,用于指定函数体,即该函数被调用后,要执行的功能代码。

举例:

#定义函数tool
def tool(a,b,c = 100):print('我的名字叫:'+a,'我的年龄是'+str(b),'岁,我的成绩是'+str(c))
#调用函数
tool('小明',7)

运行结果如下:

可变参数

在Python中,还可以定义可变参数。可变参数也称不定长参数,即传入函数中的实际参数可以是零个、一个、两个到任意个。

定义可变参数时,主要有两种形式:一种是*parameter;另一种是**parameter。

*parameter

*parameter 形式表示接收任意多个实际参数并将其放到一个元组中。例如,定义一个函数,让其可以接收任意多个实际参数。

举例:

#定义函数sum
def sum(*temp):print('\n我喜欢的水果有:')for i in temp:print(i)
#调用函数
sum('苹果')
sum('苹果','香蕉','梨')
sum('香蕉','榴莲','火龙果','李子','哈密瓜')

运行结果如下:

**parameter

**parameter形式表示接收任意多个类似关键字参数一样显式赋值的实际参数,并将其放到一个字典中。

举例:

def printsign(**sign):# 定义输出姓名和星座的函数# 输出一个空行# 遍历字典# 输出组合后的信息print()for key, value in sign.items():print("["+ key+"]的星座是:"+ value)printsign(绮梦='水瓶座',冷伊一='射手座')

运行结果如下:

返回值

到目前为止,我们创建的函数都只是为我们做一些事,做完即结束。但实际上,有时还需要对事的结果进行获取。为函数设置返回值的作用就是将函数的处理结果返回给调用它的函数。

在Python 中,可以在函数体内使用return 语句为函数指定返回值。该返回值可以是任意类型,并县无论retun 语句出现在函数的什么位置,只要得到执行,就会直接结束函数的执行。

举例:

def sum(a,b):return a+b          #返回a+b的和
#调用函数
print(sum(1,7))

运行结果如下:

变量的作用域

变量的作用域是指程序代码能够访问该变量的区域,如果超出该区域,再访问时就会出现错误。在程序中,一般会根据变量的“有效范围”将变量分为“局部变量”和“全局变量”。下面分别对这两个变量进行介绍。

局部变量

局部变量是指在函数内部定义并使用的变量,它只在函数内部有效。也就是说,函数内部的名字只在函数运行时才会创建,在函数运行之前或者运行完毕之后,所有名字都将不存在。所以,如果在函数外部使用函数内部定义的变量,就会出现抛出NameError异常。

举例:

def sum():c = '世界之大,无奇不有'print(c) 
print(sum())print(c)

运行结果如下:

全局变量

与局部变量对应,全局变量为能够作用于函数内外部的变量。全局变量主要有以下两种情况。

1、如果一个变量在函数外部被定义,那么它不仅可以在函数外部被访问到,而且也可以在函数内部被访问到。在函数外部定义的变量是全局变量。

举例:

c = '世界之大,无奇不有'
def sum():print('函数内部:'+c)
#调用函数
sum()
#直接输出全局变量c
print('函数外部:'+c)

运行结果如下:

注意:当局部变量与全局变量重名时,对函数内部的变量进行赋值后,不影响函数外部的变量。

2、在函数内部定义,在使用global 关键字修饰后,该交量将变为全局变量。在函数外部也可以访问到该变量,且还可以在函数内部对其进行修改。

举例:

def sum():c = '世界那么大,我想去看看'print('函数内部c=:'+c)
#调用函数
sum()
print('函数外部c='+c)def sun():global cc = '世界那么大,我想去看看'print('函数内部c='+c)
#调用函数
sun()
#直接输出全局变量c
print('函数外部c=:'+c)

运行结果如下:

从上述结果中可以看出,在函数内部定义的变量即使与全局变量重名,也不影响全局变量的值。那么想要在函数内部改变全局变量的值,需要在定义局部变量时,使用global 关键字修饰,就可以在函数内部修改全局变量的值。

注意:尽管 Python 允许全局变量和局部变量重名,但是在实际开发时,不建议这么做,因为这样容易让代码混乱,很难分清哪些是全局变量,哪些是局部变量。

匿名函数

匿名函数是指没有名字的函数,应用在需要一个函数但是又不想费神命名这个函数的场合。通常情况下,这样的函数只使用一次。在pyhon中,使用lambda 表达式创建匿名函数,其

法格式如下:

result = lambda [arg1 [,arg2.,argn]]:expression

其中,result用于调用lambda表达式,[arg1 [,arg2.,argn]]为可选参数,用于指定要传递的参数列表,多个参数间使用逗号分割,expression为必选参数,用于指定一个实现具体功能的表达式,如果有参数,那么在该表达式中将应用这些参数。

举例:

#常规代码
def sum(a,b):result = a +breturn result
a,b = 3,10
print(sum(a,b))#使用 lambda 表达式的代码
result = lambda a,b: a+b
print(result(a,b))

运行结果如下:

下一篇   面向对象程序设计

相关文章:

python语言进阶之函数

目录 前言 函数的创建和调用 函数创建 调用函数 参数传递 形式参数和实际参数 位置参数 数量必须与定义时一致 位置必须与定义时一致 关键字参数 为参数设置默认值 可变参数 **parameter 返回值 变量的作用域 局部变量 全局变量 匿名函数 前言 提到函数&…...

网络安全等级保护基本要求、测评要求、高风险判定指引综合梳理

网络安全等级保护基本要求、测评要求、高风险判定指引综合梳理 等级保护基本要求、测评要求、高风险判定指引综合梳理测评要求思维导图二级三级 花了些时间把网络安全等级保护涉及的以下三份标准文件进行了整理,以表格的形式进行展现,能帮助初学者更加直…...

JSON入门略要

JavaScript对象表示法(JavaScript Object Notation,JSON)已经成为RESTful接口设计中的事实标准。 JSON数据格式使得应用程序可以通过RESTful API等方式在网络上进行数据通信。 REST: 表现层状态转化(REpresentation State Transf…...

Python爬虫抓取数据时,如何设置请求头?

在Python爬虫中设置请求头是确保爬虫能够正常运行并获取目标数据的关键步骤之一。请求头可以帮助我们模拟浏览器行为,避免被目标网站识别为爬虫。以下是如何在Python爬虫中设置请求头的详细指南: 一、使用requests库设置请求头 requests库是Python中最…...

以若依移动端版为基础,实现uniapp的flowable流程管理

1.前言 此代码是若依移动端版为基础,实现flowable流程管理,支持H5、APP和微信小程序三端。其中,APP是在安卓在雷电模拟器环境下完成的,其他环境未测试,此文章中所提及的APP均指上述环境。移动端是需要配合若依前后端分…...

DeepSeek 助力 Vue 开发:打造丝滑的开关切换(Switch)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...

unity学习39:连续动作之间的切换,用按键控制角色的移动

目录 1 不同状态之间的切换模式 1.1 在1个连续状态和一个连续状态之间的transition,使用trigger 1.2 在2个连续状态之间的转换,使用bool值切换转换 2 至少现在有2种角色的移动控制方式 2.1 用CharacterController 控制角色的移动 2.2 用animator…...

C++ ——构造函数

1、作用:创建对象时,给对象的属性进行初始化 2、特点 (1)构造函数与类同名 (2)如果没有显式给出构造函数,编译器会给出默认的构造函数(参数为空,并且函数体也为空&#…...

Python实现语音识别详细教程【2025】最新教程

文章目录 前言一、环境搭建1. 下载 Python2. 安装 Python3 使用 pip 安装必要的库 二、使用 SpeechRecognition 库进行语音识别1.识别本地音频文件2.实时语音识别3. 使用其他语音识别引擎 注意事项 前言 以下是一份较为完整的 Python 语音识别教程,涵盖环境搭建、使…...

【第12章:深度学习与伦理、隐私—12.4 深度学习与伦理、隐私领域的未来挑战与应对策略】

凌晨三点的自动驾驶测试场,AI系统突然在暴雨中做出惊人决策——它选择撞向隔离带而不是紧急变道,因为算法推演发现隔离带后的应急车道站着五个工程师。这个惊悚的伦理困境,揭开了深度学习伦理危机最尖锐的冰山一角。 一、潘多拉魔盒已开:深度学习伦理的四大原罪 1.1 数据原…...

Django中数据库迁移命令

在 Django 中,数据库迁移是确保数据库结构与 Django 模型定义保持一致的重要过程。以下是 Django 中常用的数据库迁移命令: 1. python manage.py makemigrations 功能:此命令用于根据 Django 项目的模型文件(models.py&#xff…...

Win11 远程 连接 Ubuntu20.04(局域网)

Win11 远程 连接 Ubuntu20.04(局域网) 0. Ubuntu 开启共享1. Ubuntu系统中安装RDP服务器2.windows中连接使用方式1:远程桌面连接(winr: mstsc)方式2:mobaXterm 3 问题远程连接后出现黑屏 参考文献: 0. Ubuntu 开启共享 在ubunt设置中&#x…...

安卓手游内存call综合工具/内部call/安卓注入call/数据分析(类人猿学院)

进程分析注入综合工具总界面 模块分析函数分析遍历 函数分析 so汇编分析 汇编call植入器,支持模拟器x86 x64 和手机arm64指令全平台 防ce搜索数据功能 全国首套发布,阿凡老师学院最好的安卓内存逆向老师,几乎行业最强的,有兴趣可以…...

PPT工具集

PPT模版 免费下载 爱PPT优品PPTPPT之家第一PPTOfficePlus部分免费 AI生成PPT Kimi秘塔搜索 可以输入内容生成PPT大纲。...

SpringBoot:使用spring-boot-test对web应用做单元测试时如何测试Filter?

对SpringBoot的Web应用做单元测试时&#xff0c;一般会使用spring-boot-test&#xff0c;pom.xml中会添加如下内容&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><…...

解锁 Java 回调函数:异步编程与事件处理的利器

什么是 Java 回调函数 在 Java 中&#xff0c;回调函数是一种编程模式&#xff0c;允许将一个方法作为参数传递给另一个方法&#xff0c;当某个特定事件发生或某个任务完成时&#xff0c;调用该方法。回调机制可以使代码更加灵活和可扩展&#xff0c;因为它允许在运行时动态地…...

记PasteSpider部署工具的Windows.IIS版本开发过程之草稿-Web.IIS.Administration解读(5)

本文是记录PasteSpider的Windows.IIS开发过程, 在应用开发中,结果很重要,但是开发过程中遇到的问题和思考绝对是更有意义的事情! 经历过不同的需求后,你会发觉案例项目还真的只是案例项目,和实际项目天差地别!!! PasteSpider是开发者专属部署工具, 新版本的支持Windo…...

MySQL Workbench安装教程以及菜单汉化

WorkBench的下载 直接给下载MySql WorkBench的链接&#xff0c;直接进入正题&#xff1a;MySQL :: Download MySQL Workbenchhttps://dev.mysql.com/downloads/workbench/进入了下载界面&#xff1a; &#xff08;安装路径自己看着办&#xff0c;注意安装路径不能有中文&#…...

【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十节】

ISO 14229-1:2023 UDS诊断服务测试用例全解析&#xff08;ClearDiagnosticInformation0x14服务&#xff09; 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月13日 关键词&#xff1a;UDS协议、0x14服务、DTC清除、ISO 14229-1:2023、ECU测试 一、服务功能…...

Python的imutils库详细介绍

imutils 是一个专为简化OpenCV&#xff08;计算机视觉库&#xff09;常见操作而设计的Python工具库&#xff0c;提供了一系列便捷函数&#xff0c;使图像和视频处理更加高效和简洁。以下是对其功能、安装及用法的详细介绍&#xff1a; 1. 安装方法 通过pip安装&#xff1a; p…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...