Python学习笔记——自定义函数(基础知识)

自定义函数非常简洁有效地实现了代码的复用,让程序编写、阅读、测试和修改变得更加容易。

下面记录Python自定义函数的使用。

1、定义函数:

def describe_pet(pet_name,animal_type='dog'):'''显示宠物的信息'''print(f"\nI have a {animal_type}.")print(f"My {animal_type}'s name is {pet_name.title()}。")   

上面代码定义了一个函数describe_pet(),第一行使用定义函数的关键字def,def关键字告诉Python解释器你要定义一个函数,describe_pet是函数名字,紧跟函数名字后面是一对圆括号,括号内可定义参数,或者为空(没有参数,圆括号也是必须的),最后是冒号结尾。

上面代码第二行及所有缩进的代码构成了函数体。

上面代码第二行的文本使用一对三单引号(或者双引号),成为文档字符串(docstring)注释,描述该函数功能。文档字符串注释可以是单行,也可以是多行,但并不是必须有,主要是供以后调用及其他人调用可以清楚该函数的功能。

2、函数参数:形参与实参

在函数定义中,变量pet_name和animal_type是函数形参(parameter),属于函数完成工作所需要的信息。

在调用函数时,让函数使用的信息放在圆括号内,如下的代码实现调用,'旺旺'就是一个实参,这个实参传递给函数describe_pet(),并把值赋给形参pet_name。

describe_pet('旺旺')

3、传递参数

函数定义中可以包含多个形参,因此函数调用中也可能包含多个实参。向函数传递实参的方法很多,既可以使用位置实参,这要求实参的顺序与形参的顺序必须相同;也可以使用关键字实参,其中每个实参是由变量名(形参)=值(实参)组成;还可以使用列表和字典。

(1)位置实参

使用位置实参,函数调用中的每个实参关联到函数定义中的一个形参。最简单的方式是基于实参的顺序进行关联。以这种方式关联的实参成为位置实参。如下:

describe_pet('花花','猫咪')

实参'花花'被赋值给形参pet_name,实参'猫咪'赋值给形参animal_type.

使用位置实参来调用函数是,实参和形参的顺序必须一致。

(2)关键字参数

关键字实参是传递给函数的名值对。如下:

describe_pet(animal_type='猫咪',pet_name='花花')

使用关键值实参,因将函数中形参名和实参值关联起来,Python知道各个值该赋值给哪个形参,故位置可以不按照顺序。如下代码输入效果和上面是一样的:

describe_pet(pet_name='花花',animal_type='猫咪')

(3)默认值

在编写函数时,可以给每个形参指定默认值。如果在调用函数时给形参提供了实参,Python将使用指定的实参值;否则将使用形参的默认值。因此,给形参指定默认值后,可在函数调用时省略相应的实参。上面函数定义中,对形参animal_type='dog',就是给形参animal_type指定了默认值'dog'。看如下代码:

describe_pet('旺旺')

上面一行代码调用describe_pet()函数,仅传递了一个实参,可以正确执行,输出结果如下:

函数中因给形参animal_type指定了默认值'dog',调用时如果没有对应的实参,Python将自动把animal_type形参赋值默认值'dog'。

注意(1):当使用默认值时,必须在形参列表中先列出没有默认值的形参,再列出有默认值的形参,这让Python依然能够正确地解读位置参数。

注意(2):在给形参指定默认值时,通俗习惯是等号两边不要有空格。但是如果有空格,系统会正常运行。

(4)混合调用:

Python允许使用位置参数、关键字参数和默认值,可以多种形式进行混合调用,上面定义的函数2个参数,一个是位置参数pet_name,一个是关键字参数animal_type。

基于这种混合定义,在任何情况下调用ame提供实参,在指定该实参时,既可以使用位置实参,也可以使用关键字实参。

因为animal_type是关键字实参,指定了默认值'dog',调用函数可以不传递实参,使用默认值。但是要描述的动物不是'dog',就需要传递相应的实参值,同样,既可以使用位置参数如下:

describe_pet('花花','猫咪')

也可以使用关键参数,如下:

describe_pet(pet_name='花花',animal_type='猫咪')

使用关键字实参,顺序可以更改,结果是一样的。

另外,可以混合使用,如下:

describe_pet('花花',animal_type='猫咪')

实参'花花'将赋值给形参pet_name,形参animal_type被赋值为'猫咪'。

请注意:混合调用,位置参数要在前,关键字参数在后,多个位置参数,需要确保顺序,如下位置参数在后,则出现错误:

(5)实参不匹配错误

调用函数,很可能会遇到实参不匹配异常错误。当调用时提供的实参多于或者少于函数定义时的形参数量时,将出现实参不匹配错误。如下:

上面代码调用describe_pet(),没有传递参数,Python会提示出错信息“缺少一个位置参数”,因为定义函数时提供的形参animal_type提供了默认值,所以提示是“缺少一个参数”。

(6)让实参变成可选

有时候,需要让参数变成可选的(额外信息),以便使用函数的人只在必要时才提供。给形参指定默认值就可以做到这一点。

注意:Python中,整数0,空字符串''及None值都等同于布尔值False。

(7)列表作为函数的参数

向函数传递列表比较常用,可能是名字列表、整数列表或更复杂的对象列表,这样可以传递给函数更多的值。如下:

上面代码,向函数传递了一个列表,函数获取列表的值,输入一条个性化的问候语。

(1)将列表传递给函数后,函数中可以修改列表,这让函数可以高效的处理大量数据,但是需要需要清楚和注意的是:在函数中对这个列表所做的任何修改是永久的。

上面函数print_models(),两个形参都是列表,一个是未打印的设计列表,以及一个空列表是完成打印的列表。函数print_models()模拟了打印设计的过程。

运行上面代码,调用函数print_models(),在函数中对列表进行了修改,实参unprinted_designs列表中元素被遍历弹出pop(),执行函数后成为空列表了。

(2)禁止函数修改列表

有时候,需要禁止函数修改列表(传入的实参列表类型变量),为了解决这个问题,可以向函数传递列表的副本而不是原始列表,这样函数体内对传入的实参(列表变量)做任何修改都只影响副本,而不影响原列表。需要如下这样做:

function_name(list_name[:])

上面代码向函数传递原列表的切片,切片是创建了原列表的副本,这样调用函数,函数体内代码对副本做修改,不影响原列表,比如:

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

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

相关文章

仿12306校招项目-前后端运行

目录 1.git 克隆 2.设置JDK版本 3.sql脚本导入数据 4.启动中间件 5.运行后端 6.运行前端 1.git 克隆 打开 IntelliJ IDEA,菜单栏顶部找到 Git -> Clone 选项。找到 Clone 这个按钮输入 gitgitee.com:nageoffer/12306.git或者https://gitee.com/nageoffer/…

C# CAD交互界面-模态窗体与非模态窗体调用方式

运行环境Visual Studio 2022 c# cad2016 一、模态窗体调用方式: 当一个模态窗体打开时,它会阻塞主窗体的所有输入,直到关闭该模态窗体为止。例如,弹出一个对话框让用户必须完成某些操作后才能继续使用主程序。 [CommandMethod(&q…

C++正则表达式笔记

最近翻了翻正则表达式的一些资料&#xff0c;做个记录。 1、微软官方 <regex> 函数 | Microsoft Learn 2、正则表达式语法简介 正则表达式语法简介 - 简书 3、正则表达式基础语法大全 正则表达式基础语法大全_正则表达式语法大全-CSDN博客 4、练习 &#xff08;1…

HarmonyOS - 实现多设备协同开发实战教程~

前言 现在随着个人设备越来越多&#xff0c;越来越需要多个设备之间相互感知和连接&#xff0c;设备和设备之间可以相互联动&#xff0c;形成互联互通的场景&#xff0c;而搭载HarmonyOS的设备恰好可以满足这一点 。下面通过开发一个HarmonyOS的多端分布式表白应用来实现设备之…

python coding with ChatGPT 打卡第21天| 二叉树:最近公共祖先

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…

hope实验室预备役第4次测试题解

目录 1.Foreign Exchange 2.Takahashi Gets Lost 3.Sasha and the Beautiful Array 4.Sasha and the Drawing 5.Sasha and the Casino 6.Only one of two 7.村村通 8.传送门 1.Foreign Exchange 原题链接 Sample 1 InputcopyOutputcopy 4 5 7 0 3 2 2 4 3 5 25 Sample…

【AI绘画】Stable Diffusion简介_stable diffusion变现

手把手教你入门绘图超强的AI绘画&#xff0c;用户只需要输入一段图片的文字描述&#xff0c;即可生成精美的绘画。给大家带来了全新保姆级教程资料包 &#xff08;文末可获取&#xff09; Stable Diffusion是2022年发布的深度学习文本到图像生成模型&#xff0c;它主要用于根据…

ncnn之三(补充):window环境下vs2022安装ncnn+protobuf

启动VS2022 下面的 x64 Native Tools Command Prompt for VS2022 protobuf git clone gitgithub.com:protocolbuffers/protobuf.git# 或者 下载 https://github.com/google/protobuf/archive/v3.11.2.zip cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPERelease -D…

HTML的特殊字符

HTML的特殊字符 有些特殊的字符在 html 文件中是不能直接表示的&#xff0c;例如: 空格&#xff0c;小于号(<)&#xff0c;大于号(>)&#xff0c;按位与(&)。 空格 示例代码&#xff1a; 运行结果&#xff1a; 由于html 标签就是用 < > 表示的&#xff0…

【快速搞定Webpack5】修改输出文件目录及自动清理上次打包文件(五)

介绍 默认情况下webpack打包后&#xff0c;我们的图片和js等文件都会被打包到dist目录下&#xff0c;文件多了混淆在一起一方面不利于文件的查找和管理&#xff0c;另外一方面看上去也不美观。 所以今天我们学习的内容就是控制输出后的文件进入不同的目录。 一、配置 新增4…

BioTech - 大型蛋白质复合物的组装流程 (CombFold)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/136187314 CombFold是用于预测大型蛋白质复合物结构的组合和分层组装算法&#xff0c;利用AlphaFold2预测的亚基之间的成对相互作用。CombFold的组…

MES系统的功能有哪些?

阅读本文&#xff0c;你将了解&#xff1a;一、MES系统是什么&#xff1b;二、MES系统的功能&#xff1b;三、MES系统的使用场景与案例分析&#xff1b;四、如何更高效地利用MES系统。 这是我们公司正在使用的MES系统&#xff0c;已为大家搭建好模板了&#xff0c;无需下载&…

美团外卖商超销量数据

字段内容&#xff1a; shop_id varchar(50) NOT NULL, shop_id_str varchar(50) NOT NULL, shop_name varchar(400) DEFAULT NULL, shop_min_price varchar(10) DEFAULT NULL, shop_score varchar(10) DEFAULT NULL, shop_wm_score varchar(10) DEFAULT NU…

【Vuforia+Unity】AR02-长方体物体识别

1.创建模型 选择多维长方体图&#xff0c;这个长方体是生活中的真实物体的拍摄图&#xff0c;提前把6个面拍摄好并裁剪干净。 官网创建模型https://developer.vuforia.com/targetmanager/project/targets?projectId0ddbb5c17e7f4bf090834650bbea4995&avfalse 设置长宽高…

0220作业

C语言实现LED1闪烁 led.h #ifndef __LED_H__ #define __LED_H__//RCC寄存器封装 #define RCC_MP_AHB4_ENSETR (*(volatile unsigned int*)0x50000A28) //寄存器封装//GPIO寄存器封装 typedef struct{volatile unsigned int MODER; //00volatile unsigned int OTYPER; //04vol…

java数据结构与算法刷题-----LeetCode144. 二叉树的前序遍历

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 解题思路 利用递归&#xff0c;每次入栈一个结点&#xff08;每次递归都是…

优思学院【六西格玛案例】美国医院急诊部满意度提升

今天&#xff0c;优思学院来分享一个早期六西格玛项目的案例&#xff0c;项目背景是这样的&#xff0c;多年前&#xff0c;美国犹他州盐湖城的LDS医院已经实施了许多最佳实践。医院提供了床旁登记、高级分诊协议、护理点测试和实时放射学检查。一个强大而全面的持续质量改进计划…

CSS三大定位方式(浮动、定位、弹性盒)详细解析

CSS三大定位方式 前言&#xff1a;作为一名前端开发&#xff0c;已经工作2年了。由于自己是半路出家&#xff0c;从嵌入式方向转到前端开发&#xff0c;都是边百度边开发&#xff0c;很多基础都不了解&#xff0c;只要解决问题就好&#xff0c;但是近来为了让自己知识体系化&a…

北京高考数学填空题真题练一练(2014-2023)

距离2024年高考还有不到四个月的时间&#xff0c;今天我们来看看北京市的高考数学题真题。最近几年&#xff0c;只有北京、天津、上海三个直辖市的高考题是自主命题&#xff0c;其他省份全部是使用教育部统一命题的试卷。而且北京、天津、上海的数学现在也不再区分文理卷了&…

利用iSCSI服务部署IP SAN网络存储服务

一、配置环境&#xff08;Vmware WorkStation虚拟环境&#xff09; 服务端与客户端OS&#xff1a;openEuler 22.03-LTS CPU&#xff1a;1U1C 内存&#xff1a;2G 硬盘&#xff1a;5个SCSI磁盘&#xff0c;其中一个作为系统盘&#xff0c;另外四个配置为RAID5阵列 服务器IP…