python-----函数详解(一)

一、概念及作用:

概念:由若干条语句组成语句块,其中包括函数名称、参数列表,它是组织代码的最小单元,完成一定的功能

作用:把一个代码封装成一个函数,一般按功能组织一段代码

目的就是为了重复使用如,print函数可以重复多次的使用,

减少了代码冗余,代码更加简洁美观,可读易懂

二、函数的定义

def   函数名(标识符)

        函数体(代码块)

        return(返回值){如果没有return语句,隐士返回None值}

下面用一个最简单的函数,加法来举例说明

调用时写传入的参数是实际参数,是实实在在传入的值,简称为实参,如add(5,4)

定义中参数列表称为形式参数,只是一种符号的表达(标识符),简称形参,如add(x,y)

输出结果

从上面代码中可以看出,

定义了一个叫add的函数,能接收两个参数

该函数计算 的结果,通过返回值返回,也就是return语句

调用时通过函数名add后的两个参数,返回可使用变量接收

函数名也是标识符

返回值也是只

三、函数的参数

了解了函数的定义,我们知道了函数要定义好形式参数,调用是也要有足够的实际参数,一般来说,形式参数要和实际参数一致(除可变参数除外)

3.1、实参传参方式

3.1.1、位置传参

定义式def fn(x,y,z),调用时使用fn(1,3,5),按照参数定义顺序传入实参

输出结果

3.1.2、关键字传参

定义时def fn(x,y,z),调用时使用fn(x=1,y=2,z=3)使用形参的名字来传入实参的方式,如果使用了形参名,那么传入顺序可就和定义顺序不同了

输出结果

那么这两种方式可以混和使用吗?答案是肯定的,可以,如何使用?如下

情况一、位置参数在前面,关键字参数在后面

输出结果

情况一、位置参数在后面,关键字参数在前面

输出结果

直译过了就是位置参数要跟在关键字后面,也就是说位置参数必须在关键字之前传入

总结:实际传参有两种方式,位置传参和关键字传参

位置传参和形参依次对应

关键字传参,按照参数名称对应,与顺序无关

这两种传参方式可以混和使用

位置传参不能再关键字传参之后

了解了实参,下面 来看看形参

3.2、形参定义

3.2.1、形参缺省值

缺省值,也称为默认值,可以在函数定义时,为函数增加一个缺省值,其作用:

参数的默认值可以在未传入足够的实参时,对没有给定的参数赋值为默认值

参数非常多的时候,并不需要用户每次输入 都输入所有参数,简化函数调用。

如下:

输出结果

也可以这样使用

位置传参,6传给了x,y=5

还可以这样定义函数

如果缺省值定义在普通参数之前呢?如下:

输出结果

没有默认值的参数后面跟着默认值的参数是错误的,也就是说缺省值应该在普通列表的最后

总结:x,y都可以接受两种传参方式,既可以接收位置又可以接受关键字参数,但是注意,不能传入多个参数,也就是形参有多少个,实参对应形参的个数。普通参数也可以有缺省值。缺省值应该在普通列表的最后。

下面来看一个登录函数

输出结果

解决调用时函数参数过于复杂的问题.

3.3、可变参数

3.1、可变位置参数

将可变参数之前先看一段代码,需求:写一个函数,可以对多个数累加求和。

输出结果

上列中传入可迭代对象,并累加每一个元素

如果非要用fn(1,2,3)怎么办呢?其实可以这样写

输出

从上面可以看出,*可变形参,可以接收多个实参,多个实参被收集到一个对象中,元组不可变。但是元组可迭代,所以可以写成

这是按照位置传参

输出结果:

如果按照关键字传参呢?

输出结果:

也就是说不期望用关键字传参

总结:在形参前使用*表示改形参是可变位置参数,可以接受多个实参

他将收集到的实参组织到一个元组中。

3.1、可变关键字参数

在形参前使用**,表示改形参是可变关键字参数,可以接受多个关键字参数,

他将收集到的实参的名称和值,组织到一个dict中。字典是可变的

输出结果

在函数函数内部,你能传入的变量名,有要求,对kwargs进行处理,username  in kwargs.keys()

如果可变位置参数和可变关键字参数混合使用呢?请看下列代码。

可以定义为下列方式吗?

输出结果:

在115行中,这种定义方式是错误的。也就是说,可变位置参数要在可变关键字参数之前。

总结就是:

有可变位置参数和可变关键字参数。

可变位置参数在形参前使用一个*号,可以收集若干个实参,将这些实参收集成一个tuple对象

一般用*args

可变关键字参数在形参前使用两个**好,可以收集若干个实参,讲这些实参收集成一个dict对象。一般用**kwargs

混合使用参数时,普通参数需要放到参数列表前面,可变参数要放到参数列表后面,可变位置参数要放到可变关键字参数之前。

下面看一个混合使用的列子加深对他的使用

输出结果

3.3、keyword-only参数

先看一段代码

输出结果

在python3.6之后新增了keyword-noly参数,

keyword-noly参数:在形参定义时,在一个*号之后,或一个可变位置参数之后,出现的普通参数,就已经;不在是普通参数了,称为keyword-noly参数。

keyword-only参数,言下之意就是这个参数只许传入关键字参数

看上面代码可知,*args已经截获了所有位置参数,后面的x,y不可能通过位置参数传值了,所以132、133、134都是同一类型的错误。

它的宁外一种形式。

输出结果

3.4、position-only参数

参数规则一般顺序是:position-only参数,普通参数、缺省参数、可变位置参数、keyword-only参数、可变关键字参数。

注意代码应该易读易懂,而不是为难别人。

请看下面一段代码。

输出结果

由此可知a,b必须传入位置参数。

四、封装解构

首先先看一个例子:

可以这样写

运行结果

但是这样写太麻烦了

能不能简化呢?可以这样写

输出结果

下面再来看一段代码:

输出结果

总结:

在函数使用参数,可以在迭代对象前使用*,或**来对结构进行结构,提取所有元素作为函数的实参。

*解构成位置传参

**结构成关键字传参

提取出来的元素数目要和参数要求相匹配。

注意看下面一个代码:

输出结果

通过上面的详细讲解,其实这个就很简单了,要多加练习,熟悉函数的参数和传参形式,这样以后写函数才会更加容易

五、return返回值

先看几个例子

例1:

输出结果:

return 之后的语句不会被执行

例2:

输出结果

return多条语句不能被执行

例3:

输出结果

六、函数练习题

例题1:

函数练习编写一个函数,至少能够接受两个参数,返回最小值和最大值

特别说明这里题目中的lst都等于list(range(100000)),这样便于分析时间效率
解法1:

解法1存在的问题解构了两次,max和min要遍历函数进行比较,也就是遍历了两次。时间复杂度是O(2n)能不能只遍历一次,解构一次呢?

解法2:

sorted内部使用的是排序算法,时间复杂度是O(n**2)所以在时间效率上来看,解法1比解法2执行效率更快,解构了一次

解法3:

相比与解法1,解法3只解构了1次,算法效率大大提高

解法4:

例题2:完成一个函数,可以接受输入多个输入数,每一次返回目前为止的最大值、最小值

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

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

相关文章

基于单片机的智能小区门禁系统设计(论文+源码)

1总体架构 智能小区门禁系统以STM32单片机和WiFi技术为核心,STM32单片机作为主控单元,通过WiFi模块实现与手机APP的连接,构建整个门禁系统。系统硬件包括RFID模块、指纹识别模块、显示屏、按键以及继电器。通过RFID绑定IC卡、APP面部识别、指…

百度搜索推广和信息流推广的区别,分别适用于什么场景!

信息流推广和搜索广告,不仅仅是百度,是很多平台的两个核心推广方式。 1、搜索广告: 就是基于用户的搜索习惯,更多是用户有疑问、还有用户当下就要做出行动的广告。 比如上门服务、线上咨询服务、招商加盟、了解产品各种型号和信…

STM32G4系列MCU的低功耗模式介绍

目录 概述 1 认识低功耗模式 1.1 低功耗模式的应用 1.2 低功耗模式介绍 2 低功耗模式的状态关系 2.1 低功耗模式可能的转换状态图 2.2 低功耗模式总结 3 运行模式 3.1 减慢系统时钟 3.2 外围时钟门控 3.3 低功耗运行模式(LP运行) 概述 本文主…

react 基础学习笔记

1.react 语法 ①数据渲染 函数组件将HTML结构直接写在函数的返回值中 JSX只能有一个根元素 JSX插值写法 插值可以使用的位置 1.标签内容; 2.标签属性 JSX 条件渲染:三目运算符; JSX根据数据进行列表渲染:map()方法&#x…

QT 机器视觉 1.相机类型

本专栏从实际需求场景出发详细还原、分别介绍大型工业化场景、专业实验室场景、自动化生产线场景、各种视觉检测物体场景介绍本专栏应用场景 更适合涉及到视觉相关工作者、包括但不限于一线操作人员、现场实施人员、项目相关维护人员,希望了解2D、3D相机视觉相关操作…

微服务与多租户详解:架构设计与实现

引言 在现代软件开发领域,微服务架构和多租户架构是两个重要的概念。微服务架构通过将应用程序拆分为多个独立的服务,提升了系统的灵活性和可维护性。而多租户架构则通过共享资源来服务多个客户,提高了资源利用率和系统的经济性。 一、微服务…

OpenCV的常用与形状形状描述相关函数及用法示例

OpenCV提供了提供了多种用于形状描述和分析的函数。这些函数能够帮助你提取图像中的形状特征,进行形状匹配、识别和分析。下面介绍一些常用的形状描述函数: 轮廓检测函数findContours() findContours()函数用于在二值图像中查找轮廓。有两个原型函数&…

【zlm】 webrtc源码讲解(二)

目录 webrtc播放 MultiMediaSourceMuxer里的_ring webrtc播放 > MediaServer.exe!mediakit::WebRtcPlayer::onStartWebRTC() 行 60 CMediaServer.exe!mediakit::WebRtcTransport::OnDtlsTransportConnected(const RTC::DtlsTransport * dtlsTransport, RTC::SrtpSession::…

tomcat部署war包部署运行,IDEA一键运行启动tomacat服务,maven打包为war包并部署到tomecat

tomcat部署war包前端访问 在Java Web开发中,Tomcat是一个非常流行的开源Web服务器和Servlet容器。它实现了Java Servlet和JavaServer Pages (JSP) 技术,提供了一个纯Java的Web应用环境。本文将介绍如何在Tomcat中部署运行WAR包,让你的应用快…

vue2 使用环境变量

一. 在根目录下创建.env.xxx文件 .env 基础系统变量,无论何种环境,都可使用其中配置的值,其他环境中的变量会覆盖.env中的同名变量。 .env.development 开发环境 .env.production 生产环境 .env.staging 测试环境 二. 内容格式 vue2 使用是以…

GRU神经网络理解

全文参考以下B站视频及《神经网络与深度学习》邱锡鹏,侧重对GPU模型的理解,初学者入门自用记录,有问题请指正【重温经典】GRU循环神经网络 —— LSTM的轻量级版本,大白话讲解_哔哩哔哩_bilibili 更新门、重置门、学习与输出 注&a…

STM32(二十一):看门狗

WDG(Watchdog)看门狗,手动重装寄存器的操作就是喂狗。 看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入…

数学建模微分方程模型——传染病模型

病毒也疯狂:细说传染病微分方程模型的那些事儿 “数学是打开科学大门的钥匙,而微分方程则是理解世界变化的密码。” 大家好!今天我们要聊一聊一个既严肃又有趣的话题——传染病微分方程模型。别急,听起来高大上,其实一…

亚信安全DeepSecurity中标知名寿险机构云主机安全项目

近日,亚信安全DeepSecurity成功中标国内知名寿险机构的云主机安全项目。亚信安全凭借在云主机安全防护领域的突出技术优势,结合安全运营的能力,以“实战化”为指导,为用户提供无惧威胁攻击、无忧安全运营的一站式云安全体系&#…

【论文翻译】ICLR 2018 | DCRNN:扩散卷积递归神经网络:数据驱动的交通预测

论文题目Diffusion Convolutional Recurrent Neural Network: Data-Driven Traffic Forecasting论文链接https://arxiv.org/abs/1707.01926源码地址https://github.com/liyaguang/DCRNN发表年份-会议/期刊2018 ICLR关键词交通预测,扩散卷积,递归神经网络…

数字+文旅:AI虚拟数字人如何焕发传统文旅景区新活力?

​​引言: 据《2024年中国数字文旅行业市场研究报告》显示,截至2022年,中国数字文旅市场规模已达到约9698.1亿元人民币,相较于2017年的7870.5亿元,实现了57.89%的显著增长。这一行业涵盖了数字化的文化遗产旅游、虚拟…

JVM、字节码文件介绍

目录 初识JVM 什么是JVM JVM的三大核心功能 JVM的组成 字节码文件的组成 基础信息 Magic魔数 主副版本号 其它基础信息 常量池 字段 方法 属性 字节码常用工具 javap jclasslib插件 阿里Arthas 初识JVM 什么是JVM JVM的三大核心功能 1. 解释和运行虚拟机指…

【性能优化】安卓性能优化之CPU优化

【性能优化】安卓性能优化之CPU优化 CPU优化及常用工具原理与文章参考常用ADB常用原理、监控手段原理监控手段多线程并发解决耗时UI相关 常见场景排查CPU占用过高常用系统/开源分析工具AndroidStudio ProfilerSystraceBtracePerfettoTraceView和 Profile ANR相关ANR原理及常见场…

使用 VSCode 通过 Remote-SSH 连接远程服务器详细教程

使用 VSCode 通过 Remote-SSH 连接远程服务器详细教程 在日常开发中,许多开发者需要远程连接服务器进行代码编辑和调试。Visual Studio Code(VSCode)提供了一个非常强大的扩展——Remote-SSH,它允许我们通过 SSH 协议直接连接远程…

YOLO V3 网络构架解析

YOLO V3(You Only Look Once version 3)是由Joseph Redmon等人于2018年提出的一种基于深度学习的目标检测算法。它在速度和精度上相较于之前的版本有了显著提升,成为计算机视觉领域的一个重要里程碑。本文将详细解析YOLO V3的网络架构&#x…