深度学习——第3章 Python程序设计语言(3.4 Python自定义函数)

3.4 Python自定义函数

目录

1. 函数基础知识

2. 函数的定义(声明)和调用

3. 函数参数传递

4. 函数的返回值

5. lambda函数

随着学习的日渐深入,编写的代码将会越来越复杂,所以我们需要找一种方法对这些复杂的代码进行分解、重新组织、封装,以便更好地理解代码、重复使用某些代码段。

在编程语言中,函数就能很好的实现这个目的。

函数基础知识

函数的概念

函数是一段具有特定功能的、可重用的程序代码段,用函数名来表示并通过函数名完成功能调用。

函数也可以看作是一段具有名字的子程序,要提前定义,然后在需要的地方调用执行,以避免在每个执行的地方重复编写这段子程序。

每次使用函数可以提供不同的参数作为输入,以实现对不同数据的处理,函数执行后,要反馈相应的处理结果。

函数的功能

函数是模块化程序设计的基本构成单位,使用函数具有如下优点:

  1. 实现结构化程序设计。通过把程序分割为不同的功能模块,可以实现自顶向下的结构化程序设计。
  2. 减少程序的复杂度。简化程序的结构,提高程序的可阅读性。
  3. 实现代码的复用。一次定义多次调用,实现代码的可重用性。
  4. 提高代码的质量。实现分割后子任务的代码相对简单,易于开发、调试、修改和维护。
  5. 协作开发。大型项目分割成不同的子任务后,团队可以分工合作,在同时协作开发。

Python函数分类

在Python语言中,函数可以分为三类:

1.自定义函数

本章的主要学习的内容。

2.内置函数

Python提前定义好的函数,拿来直接使用,不需要导入。在前两章学习数值数据类型和序列数据类型时已多次接触并学习。需要了解确定内置函数的参数类型、个数等信息。

3.库函数

包括标准库函数和第三方库函数。Python安装后自带的库称为标准库,例如math、random等。Python社区提供了许多其他高质量的库,如numpy、jieba、pillow等,需要单独安装,被称为第三方库。库函数需要通过import语句导入,然后才可以使用其中的函数。

内置函数

内置函数知识在之前的知识中讲授过。

内置函数是python里自带的可直接使用的函数。截止python3.8.2,共有73个内置函数,可以使用命令:print(dir(__builtins__))展示。

在这里插入图片描述

函数的定义(声明)和调用

函数的定义

Python语言定义一个函数使用def保留字,语法形式如下:

def <函数名>(参数1, 参数2, ...):函数体return <返回值或者表达式>

Python函数的定义由关键字def开始,后面加上函数名和括号,括号里是函数的参数。函数名要符合标识符规则,命名规则要求字母小写,可以使用下划线增加可阅读性。

函数参数必须放置在函数名后的括号内,可以有0个、1个或更多个参数,相邻参数之间用逗号隔开,表示传递给该函数的值或变量引用。定义函数时的参数称之为形参,意为形式上的参数,非实际参数。

右括号结束后是冒号(表示接下来的语句块为函数体),最后是函数体内容,用缩进表达从属关系。函数体是函数执行的具体代码块。

return是Python的保留关键字,后面跟随的值就是函数将要返回的值,简称“返回值”。

返回值可以是一个数值或多个数值,也可以为一个表达式。

执行return语句后函数结束。一个函数可能有多条return语句,只要执行到其中一条return语句,函数就会结束。

在这里插入图片描述

函数的调用

函数调用格式:

<被调用函数名>(实参1,实参2, ...) 

说明:

1.被调用函数名必须是当前程序中可用的函数对象。可以是内置函数、经import导入的库函数,或者是经def自定义的函数。

2.函数的定义位置应当在调用该函数的代码之前。

3.被调用函数名右侧的成对小括号不可缺失,内部用逗号间隔排列实参,必须与函数定义的形参列表一一对应。

4.所谓实参,即实际参数,为函数调用时传递到函数的实际参数。

5.如果调用的函数有返回值,可以直接赋予某一变量(或某一组变量),可以在表达式中直接使用,也可以作为另一函数的参数。如果函数没有返回值,则可以单独作为表达式语句使用。

程序调用一个函数需要执行以下四个步骤

(1)调用程序在调用处暂停执行;

(2)在调用时将实参传递给函数的形参;

(3)执行函数体语句;

(4)函数调用结束给出返回值,程序回到调用前的暂停处继续执行。

函数参数传递

函数声明时小括号中用逗号间隔的参数,称为形式参数,简称形参

函数调用时小括号中用逗号间隔的参数,有确定值,称为实际参数,简称实参

实际参数值默认按位置顺序依次传递给形式参数,如果参数个数不匹配,程序会产生错误。

定义函数时声明的形式参数,等同于函数体中的局部变量,在函数体中的任何位置都可以使用。

函数的定义示例:
在这里插入图片描述
声明函数时,可以为一些参数指定默认值。调用该函数时,如果没有传入对应的实参,则函数使用声明时指定的默认参数值。

带有默认参数的函数定义语法如下:

def 函数名(, 参数名=默认值):

在定义带有默认参数的函数时,默认参数只能出现在所有参数的最右端,并且任何一个默认参数的右侧都不能再定义非默认参数。

函数示例:基于期中成绩和期末成绩,按照指定的权重计算总评成绩
在这里插入图片描述
Python函数的参数传递还有位置参数、命名参数、可变参数、强制命名参数等方法,同学们可查找资料自行学习。

函数的返回值

自定义函数体中使用return语句返回值,同时跳出函数调用。

return是保留关键字,后面跟随的值就是函数将要返回的值,简称“返回值”。返回值可以是一个数值或多个数值,也可以为一个表达式。

一个函数可以有多条return语句,只要执行到其中一条return语句,函数调用就会结束。

函数可以没有return语句,即无返回值,语句自然执行结束,函数调用即结束。

return语句可以同时返回多个值,使用逗号间隔,这些值将被收集到一个元组中返回。
在这里插入图片描述
程序案例:使用函数生成并返回随机列表

编制一个函数,生成由n个随机整数构成的列表,然后编写测试代码,生成并输出列表各元素值。
在这里插入图片描述
程序案例:使用函数计算不确定的若干个数中的最大值并返回
在这里插入图片描述
程序案例:使用函数判断一个整数是否为素数

编制判断一个整数是否为素数的函数,然后编写测试代码,输出1-99中的素数。

函数体内部有多条返回路径;i从2开始循环,只要有i能被判断整数整除,则跳出循环,i的平方大于判断整数时停止循环。
在这里插入图片描述

lambda函数

Python有两种自定义函数,一种是def定义的函数,另一种是lambda函数,也就是匿名函数,Python编程中,大家更习惯将其称为表达式。

lambda是Python的保留关键字,用于定义匿名函数,又称lambda函数。

lambda是一种简便的、在同一行中定义函数的方法。

匿名函数并非没有名字,而是将函数名作为函数结果返回。

lambda函数的定义格式为:

<函数名> = lambda <参数列表> : <表达式>

以上的定义格式等价于:

def <函数名>(<参数列表>):return <表达式>

lambda函数特征

(1)使用lambda可以定义没有名字的函数。

(2)lambda函数有输入和输出。输入是传入的参数列表,输出是根据表达式计算得到的值。

(3)lambda函数一般情况下功能都比较简单。单行的表达式决定了lambda函数不可能完成复杂的逻辑,只能完成非常简单的功能。由于其实现的功能简单,甚至不需要专门的名字来说明。
在这里插入图片描述

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

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

相关文章

iphone/安卓手机如何使用burp抓包

iphone 1. 电脑 ipconfig /all 获取电脑网卡ip&#xff1a; 192.168.31.10 2. 电脑burp上面打开设置&#xff0c;proxy&#xff0c;增加一条 192.168.31.10:8080 3. 4. 手机进入设置 -> Wi-Fi -> 找到HTTP代理选项&#xff0c;选择手动&#xff0c;192.168.31.10:8080 …

Windows/Linux 设置固定IP

Windows/Linux 设置固定IP 在开发过程中 会经常遇到要与前端进行本地的联调 过了两天 发现 不知道为什么 ip发生了改变 所以 就写一个 windows 与linux 固定ip的博客 记录一下 Windows 话不多说 看下图 上方输入 ipconfig/all 就会出来一堆信息 下面是一些有用的信息 默认…

超使用的十个JavaScript技巧

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 JavaScript 作为最流行的语言之一&#xff0c;其语法灵活且每年都在不断吸纳新特性&#xff0c;即使是一个从业多年的老手&#xff0c; 偶尔也会有一些被…

04武忠祥0基础

收敛数列的性质 唯一性&#xff1a; 反证法&#xff1a; 发散不一定无界 举个例子&#xff0c;考虑以下数列&#xff1a; a_n (-1)^n 这个数列的每一项交替地取正负值。当 n 是偶数时&#xff0c;a_n 1&#xff0c;当 n 是奇数时&#xff0c;a_n -1。这个数列明显是发…

编程实战:类C语法的编译型脚本解释器(八)编译概览

系列入口&#xff1a;编程实战&#xff1a;类C语法的编译型脚本解释器&#xff08;系列&#xff09;-CSDN博客 前面已经介绍了Token、变量、变量表、表达式和语句&#xff0c;现在进入深水区&#xff0c;介绍编译过程&#xff0c;相当于解释型脚本的解释过程。 编译的好处是提前…

GO学习之 单例模式 sync.Once

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…

js占位符 ${} 使用

JavaScript 占位符 在 JavaScript 编程中&#xff0c;占位符是一种特殊的标记或符号&#xff0c;用于指示代码执行时应替换为实际值。占位符通常用于字符串拼接、格式化输出和动态生成代码等场景。本文将介绍 JavaScript 中常用的占位符&#xff0c;并提供相应的代码示例。 字…

在github中通过action自动化部署 hugo academic theme,实现上传md文件更新博客内容

在github中通过action自动化部署 hugo academic theme 一、GitHub Action自动化部署Hugo博客方法 主要参考&#xff1a;【Hugo网站搭建】GitHub Action自动化部署Hugo博客 次要参考&#xff1a;使用 Github Action 自动部署 Hugo 博客 二、部署过程中遇到的问题和解决办法 …

HarmonyOS鸿蒙操作系统架构

目录 1. 分布式架构&#xff1a; 2. 统一的开发平台&#xff1a; 3. 多内核共享&#xff1a; 4. 自适应界面&#xff1a; 5. AR、VR、MR支持&#xff1a; 6. 安全和隐私保护&#xff1a; 7. AI集成&#xff1a; 8. 应用生态系统&#xff1a; 9. 开源和开放&#xff1a…

C#用MathNet生成矩阵,并打印矩阵元素

文章目录 安装创建和显示矩阵 安装 MathNet.Numerics中提供了线性代数、微积分、特殊函数、概率论、随机函数、插值、最优化等一系列功能&#xff0c;是.net技术中首选的数值计算包。 其中&#xff0c;线性代数包LinearAlgebra包提供了向量、矩阵等数据结构&#xff0c;这些是…

振弦采集仪在土体与岩体监测中的可靠性与精度分析

振弦采集仪在土体与岩体监测中的可靠性与精度分析 振弦采集仪是一种用于土体和岩体监测的重要设备&#xff0c;它可以通过测量振动信号来获取土体或岩体的力学参数&#xff0c;如应力、应变、弹性模量等。而振弦采集仪的可靠性和精度是影响其应用效果的关键因素。 首先&#x…

鸿蒙4.0开发笔记之ArkTS语法基础之条件渲染和循环渲染的使用(十五)

文章目录 一、条件渲染&#xff08;if&#xff09;二、循环渲染&#xff08;ForEach&#xff09; 一、条件渲染&#xff08;if&#xff09; 1、定义 正如其他语言中的if…else…语句&#xff0c;ArkTS提供了渲染控制的能力&#xff0c;条件渲染可根据应用的不同状态&#xff0…

竞赛活动过程中评委亮灯是如何实现的

选秀节目中用到的那种评委爆灯效果要通过软件和硬件一起实现&#xff0c;软件实现在新一轮开始时&#xff0c;统一灭灯&#xff0c;评委通过按钮触发软件打开相应的灯&#xff0c;并自动发出声音。其实用到的物料包括&#xff1a;软件、按钮、灯、工业控制器。软件是核心&#…

virtualbox虚拟机安装ubuntu系统,启动黑屏

我在virtualbox虚拟机里面安装ubuntu系统&#xff0c;某次打开就卡在启动界面了。下面这样&#xff1a;&#xff08;这个截图信息是我在解决了问题之后重新进入ubnutu系统时截取的&#xff0c;不完整&#xff0c;但就是类似这样&#xff09; 报错信息&#xff1a; error: no s…

解决Kettle无法传输生偏字的问题

最近在搞数据传输&#xff0c;然后涉及到人名的时候&#xff0c;难免会碰到生僻字&#xff0c;utf8是无法存储的&#xff0c;然后我把目标表改为utf8mb4&#xff0c;但是还是无法传输生僻字&#xff0c;这就很奇怪了&#xff0c;明明两边的数据库都是MySQL 5.7x&#xff0c;但是…

【QT】容器类

目录 1.容器类概述 2.顺序容器类 2.1 QList 2.2 QLinkedList 2.3 QVector 2.4 QStack 2.5 QQueue 3.关联容器类 3.1 QSet 3.2 QMap 3.3 QMultiMap 3.4 QHash 3.5 QMuItiHash 1.容器类概述 Qt提供了多个基于模板的容器类&#xff0c;这些容器类可以用于存储指定类…

【labview报错,缺少GOOP Development Suite】

操作 当labview报此错误时&#xff0c;第一类情况为缺少包&#xff0c;第二类为所使用的GPU包已失效 以下为第一类缺包的解决方式 登录VIPM&#xff0c;如何安装VIPM查看此贴&#xff1a;VIPM安装 打开VIPM后&#xff0c;右上角输入goop,双击搜索出的安装包 勾选需要安装的包…

Linux部署Kettle(pentaho-server-ce-9.4.0.0-343)记录/配置MySQL存储

下载地址 Kettle 是一个开源的数据集成工具&#xff0c;它是 Pentaho Data Integration&#xff08;PDI&#xff09;项目的一部分。要访问 Kettle 的官方网站&#xff0c;可以通过访问其母公司 Hitachi Vantara 的网站来找到相关信息 官方网站&#xff1a;https://www.hitachi…

uni-app实现返回刷新上一页

方案一 通过监听器实现 page1 uni.$on("refresh", function(data) {if(data.page "page2") {this.reload()} })page2 methods: {handleBack() {uni.$emit("refresh", {page: "page2"})uni.navigateBack()} }方案二 通过页面实例实…

微信小程序:chooseimage从本地相册选择图片或使用相机拍照

文档 https://uniapp.dcloud.net.cn/api/media/image.html#chooseimage https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.chooseImage.html 代码示例 const res await uni.chooseImage({count: 1, //默认9sizeType: [original, compressed], //可以…