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

news2024/11/26 4:36:23

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.coloradmin.cn/o/1287451.html

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

相关文章

Superset基础入门

1 Superset概述 Apache Superset 是一个现代的数据探索和可视化平台。它功能强大且十分易用&#xff0c;可对接 各种数据源&#xff0c;包括很多现代的大数据分析引擎&#xff0c;拥有丰富的图表展示形式&#xff0c;并且支持自定义 仪表盘。 2 Superset安装 Superset 是由 P…

Hadoop学习笔记(HDP)-Part.12 安装HDFS

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

springboot监听器模式源码精讲

1.前言 很多时候我们看源码的时候看不下去&#xff0c;其中一个原因是系统往往使用了许多设计模式&#xff0c;如果你不清楚这些设计模式&#xff0c;这无疑增加了你阅读源码的难度。 springboot中就大量使用了设计模式&#xff0c;本文主要介绍其中的一种监听器模式&#xf…

mybatis 的快速入门以及基于spring boot整合mybatis

MyBatis基础 MyBatis是一款非常优秀的持久层框架&#xff0c;用于简化JDBC的开发 准备工作&#xff1a; 1&#xff0c;创建sprong boot工程&#xff0c;引入mybatis相关依赖2&#xff0c;准备数据库表User&#xff0c;实体类User3&#xff0c; 配置MyBatis&#xff08;在applic…

流媒体方案之FFmpeg——实现物联网视频监控项目

目录 前言 一、FFmpeg介绍 二、FFmpeg简易理解 三、FFmpeg的重要概念 四、软硬件准备 五、移植、运行FFmpeg 六、运行FFmpeg 前言 最近想做一个安防相关的项目&#xff0c;所以跟着韦东山老师的视频来学习视频监控方案的相关知识&#xff0c;韦东山老师讲的课非常好&…

消息中间件之间的区别

一.单机吞吐量 ActiveMQ&#xff1a;万级&#xff0c;吞吐量比RocketMQ和Kafka要低了一个数量级 RabbitMQ&#xff1a;万级&#xff0c;吞吐量比RocketMQ和Kafka要低了一个数量级 RocketMQ&#xff1a;10万级&#xff0c;RocketMQ也是可以支撑高吞吐的一种MQ Kafka&#xff…

当发送“Hello,World”时,channel发生了什么?

一、Netty概述 1.Netty是什么&#xff1f; Netty 是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于快速开发可维护、高性能的网络服务器和客户端。 2.Netty的地位怎么样&#xff1f; Netty 在 Java 网络应用框架中的地位就好比&#xff1a;Spring 框架在 JavaEE …

5个超实用GPT技巧,包括绩效总结、头脑风暴、营销策略等(内附提示词)

今天和大家分享5个用于工作上的GPT技巧&#xff0c;例如进行绩效总结、自我评估、头脑风暴&#xff0c;还是制作PPT方案等等&#xff0c;最大化提升你工作效率&#xff0c;本期内容对于大家来说都非常受用&#xff0c;记得收藏起来哦&#xff01; 那么接下来就直接进入正题吧&a…

力扣题:字符的统计-12.5

力扣题-12.5 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;551. 学生出勤记录 I 解题思想&#xff1a;进行字符的统计即可 class Solution(object):def checkRecord(self, s):""":type s: str:rtype: bool"""fla…

网工内推 | 上市公司初级网工,HCIP认证优先,14薪,享企业年金

01 易佰网络 招聘岗位&#xff1a;初级网络工程师 职责描述&#xff1a; 1.电脑周边设备&#xff08;打印机、扫描仪、传真机、复印机、投影仪等&#xff09;安装与维护&#xff1b; 2.局域网维护&#xff1b;无线网WLAN维护&#xff1b;监控系统维护&#xff1b; 3.固资维护管…

如何使用 Docker 安装 Node-RED

安装 Node-RED 使用 Docker 是一种简便的方式&#xff0c;以下是基本的步骤&#xff1a; 安装 Docker&#xff1a; 确保已在系统上安装 Docker。可从 Docker 官方网站 或 Windows Docker 安装教程 获取安装指南。 拉取运行 Node-RED 镜像&#xff1a; 打开终端或命令行界面&am…

【MySQL】基本安装配置

1 基础知识 1.1 MySQL安装 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 1.1.1 安装过程 配置环境变量&#xff08;和配置Java8的环境变量如出一辙&#xff09;在MySQL解压文件夹下&#xff0c;导入my.ini文件&#xff0c;与bin目录同级&#xff0c;具体文…

关于inline函数声明和定义为什么不可以分离

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 前言 inline函数在使用时声明和定义不可以分离&#xff0c;接下来我们将会解释为什么是这样的。 我们从程序的编译链接说起。 首先我们先介绍一下程序的翻译环境&#xff1a; 编译分以下几个步骤&#xff0c;预处理&#x…

sort by modulus of a complex number

描述 复数E包含实部x和虚部y, Exyi;E的模为: 输入n(<1000)和n对(x,y); 按模数升序对复合体进行排序&#xff0c;如果模数相等&#xff0c;则按输入顺序排序。 排序后输出n行of (x_i,y_i,mod_i)&#xff0c;保留2个十进制小数。 输入 输入n和n对(x,y); 输出 输出排序后的n行(…

Android : AndroidStudio开发工具优化

1.开启 gradle 单独的守护进程 Windows: 进入目录 C:\Users\Administrator\.gradle 创建文件&#xff1a; gradle.properties # Project-wide Gradle settings. # IDE (e.g. Android Studio) users: # Settings specified in this file will override any Gradle s…

在python的Scikit-learn库中,可以使用train_test_split函数来划分训练集和测试集。

文章目录 一、在Scikit-learn库中&#xff0c;可以使用train_test_split函数来划分训练集和测试集总结 一、在Scikit-learn库中&#xff0c;可以使用train_test_split函数来划分训练集和测试集 在Scikit-learn库中&#xff0c;可以使用train_test_split函数来划分训练集和测试…

深度观察|近视防控乱象下,角膜塑形镜撬动百亿市场的背后…

前不久&#xff0c;“晒眼皮”莫名上了热搜。顾名思义&#xff0c;就是在太阳底下闭眼&#xff0c;让眼皮享受日光浴。 不少近视患者相信&#xff0c;这种做法可以延缓近视&#xff0c;甚至可以让近视度数“清零”。毫无疑问&#xff0c;这是一个收割智商税的做法&#xff0c;…

数字双胞胎:低代码与工业4.0的崭新融合

引言 随着工业4.0的快速发展&#xff0c;数字化转型已经成为制造业的关键课题。在这个数字化浪潮中&#xff0c;"数字双胞胎"技术崭露头角&#xff0c;它将实际世界与数字模拟相连接&#xff0c;提供了更好的生产过程理解、监控和优化方法。但数字双胞胎的构建和维护…

CoreDNS实战(七)-日志处理

本文主要用于介绍CoreDNS用来记录日志的几种方式以及在生产环境中遇到的一些问题和解决方案。 1 log插件 coredns的日志输出并不如nginx那么完善&#xff08;并不能在配置文件中指定输出的文件目录&#xff0c;但是可以指定日志的格式&#xff09;&#xff0c;默认情况下不论…

算法笔记:样条插值

1 什么是样条 样条来源于早期工程制图&#xff0c;为了将一些固定点连成一条光滑的曲线&#xff0c;采用具有弹性的木条固定在这些点上通过样条画出来的曲线不仅经过各固定点&#xff0c;而且连续光滑 2 样条函数 数学上定义成一个分段多项式函数 每两个点之间用一个多项式来…