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.mzph.cn/web/56404.shtml

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

相关文章

autMan奥特曼机器人-安装或更新golang依赖

autMan2.3.4及以上需要更新中间件或安装golang依赖,参照下列步骤: 一、直装版本 ssh下进入autMan文件夹下plugin/scripts下面输入以下指令: go get -u github.com/hdbjlizhe/middleware二、docker版本 从后台进入web终端,依次输入…

Ubuntu 上安装 Redmine 5.1 指南

文章目录 官网安装文档:命令步骤相关介绍GemRubyRailsBundler 安装 Redmine更新系统包列表和软件包:安装必要的依赖:安装 Ruby:安装 bundler下载 Redmine 源代码:安装 MySQL配置 Redmine 的数据库配置文件:…

Node.js:深入探秘 CommonJS 模块化的奥秘

在Node.js出现之前,服务端JavaScript基本上处于一片荒芜的境况,而当时也没有出现ES6的模块化规范。因此,Node.js采用了当时比较先进的一种模块化规范来实现服务端JavaScript的模块化机制,它就是CommonJS,有时也简称为C…

2024ideaUI切换和svn与git的切换,svn的安装和配置,idea集成svn ,2024-10-18日

2024-10-18日 2024的UI实在很不舒服,隐藏了很多按键; 第一步: 视图 -》 外观 -》 工具栏选出来; 结果出来: 运行的按键和设置的按钮 第二步 点击设置的按钮,选择最后一个,重启就行 结果 舒服&…

论文阅读(二十四):SA-Net: Shuffle Attention for Deep Convolutional Neural Networks

文章目录 Abstract1.Introduction2.Shuffle Attention3.Code 论文:SA-Net:Shuffle Attention for Deep Convolutional Neural Networks(SA-Net:置换注意力机制)   论文链接:SA-Net:Shuffle Attention for Deep Convo…

九州未来亓绚亮相丽台Solution Day 2024,共建AI赋能教育新时代

在数字化浪潮席卷全球的当下,生成式人工智能正迅速渗透至数字世界的每一个角落,而AI技术的物理化应用也正成为新的趋势。10月22日,丽台解决方案日Solution Day 2024:物理AI推动行业数字变革在上海绿地外滩中心顺利举行。 大会聚焦…

报表工具怎么选?山海鲸VS帆软,哪个更适合你?

概述 在国产报表软件市场中,山海鲸报表和帆软这两款工具都占有一席之地,许多企业在选择报表工具时常常在它们之间徘徊。然而,随着企业对数据分析需求的不断增长和复杂化,如何选取一款高效、易用且性价比高的报表工具,…

“摄像机”跟随及攻击抖动实现

学习Unity的摄像机功能,可以帮助我们实现摄像机对人物的跟随移动,还可以使用这个工具自带的插件,摄像机震动,颤动,增强打击感; 首先来安装一下这个插件,window菜单--packageManage--左上角Unit…

vcpkg 从清单文件安装依赖项

vcpkg 有两种运行模式:经典模式和清单模式。清单文件有自己的 vcpkg_installed 目录,可在其中安装依赖项,与所有包都安装在通用 %VCPKG_ROOT%/installed 目录中的经典模式不同。 因此,每个项目都可以有自己的清单和自己的一组依赖…

R语言机器学习算法实战系列(十)自适应提升分类算法 (Adaptive Boosting)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍原理步骤教程下载数据加载R包导入数据数据预处理数据描述数据切割调节参数构建模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve特征的重要性保存模型总…

生发产品哪个效果最好?油秃头秋冬季养发搭子

如果你是大额头 或者 M型发际线,无论是天生的 亦或者是后天造成的,养发防脱一定要重视起来,因为防脱育发是需要循序渐进坚持的,今天就给大家分享一下几个特别有效的育发液,选对产品养发那真是稳了~ 1、露卡菲娅防脱育发…

Unity之XR Interaction Toolkit 射线拖拽3DUI

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、想实现的功能二、实现原理1.UI挂在XRGrabInteractable、刚体、BoxCollder2.修改刚体属性3.加BoxCollder 总结 前言 VR项目里正常情况有放置两种3DUI的方式…

Ovis: 多模态大语言模型的结构化嵌入对齐

论文题目:Ovis: Structural Embedding Alignment for Multimodal Large Language Model 论文地址:https://arxiv.org/pdf/2405.20797 github地址:https://github.com/AIDC-AI/Ovis/?tabreadme-ov-file 今天,我将分享一项重要的研…

关于使用 C# 处理水位数据多种格式的统一转换

关于使用 C# 处理水位数据多种格式的统一转换 1、前言2、水位数据的多种格式3、水位数据多种格式的统一转换程序展示4、水位数据多种格式的统一转换 C# 代码4.1、声明引用命名空间4.2、多种格式的统一转换 C# 代码4.3、多种格式的统一转换 C# 代码,文件输出保存 1、…

微知-Lecroy力科的PCIe协议分析仪型号命名规则(PCIe代,金手指lanes数量)

文章目录 要点主要型号命名规则各代主要产品图片Summit M616 协议分析仪/训练器Summit T516 分析仪Summit T416 分析仪Summit T3-16分析仪Summit T28 分析仪 综述 要点 LeCroy(力科)成立于1964年,是一家专业生产示波器厂家。在美国纽约。一直把重点放在研制改善生产…

Hallo2 长视频和高分辨率的音频驱动的肖像图像动画 (数字人技术)

HALLO2: LONG-DURATION AND HIGH-RESOLUTION AUDIO-DRIVEN PORTRAIT IMAGE ANIMATION 论文:https://arxiv.org/abs/2410.07718 代码:https://github.com/fudan-generative-vision/hallo2 模型:https://huggingface.co/fudan-generative-ai/h…

TikTok营销实用技巧与数据分析工具:视频洞察

TikTok凭借其独特的机制和庞大的流量,成为了众多品牌和卖家对产品进行宣传推广的必要平台之一。要在TikTok上优化营销效果、提升推广效率,可以使用平台提供的重要工具——视频洞察(Video Insights)。 一、视频洞察功能与技巧 视频…

线性回归(一)

线性回归 1.基本术语 ①特征:预测所依据的自变量称为特征或协变量 ②标签:试图预测的目标称为标签或目标 2.举个栗子 线性假设是指目标(房屋价格)可以表示为特征(面积和房龄)的加权和,如下面…

YOLOv11入门到入土使用教程(含结构图)

一、简介 YOLOv11是Ultralytics公司在之前的YOLO版本上推出的最新一代实时目标检测器,支持目标检测、追踪、实力分割、图像分类和姿态估计等任务。官方代码:ultralytics/ultralytics:ultralytics YOLO11 🚀 (github.com)https://g…

解决跨域问题

跨域是浏览器受同源策略的限制,同源策略是浏览器为确保资源安全,而遵循的一种策略,该策略对访问资源进行了一些限制(如发送 ajax 请求,操作 dom,读取 cookie)。 最常见的影响就是发送 ajax 请求…