python函数进阶

news2024/11/25 2:50:55

一、函数多返回值

Q:如果一个函数内两个return,程序如何执行?

A:只执行了第一个return,原因是因为return可以退出当前函数,导致return下方的代码不执行

但是如果一个函数需要有多个返回值,该如何书写代码?

按照返回值的顺序,写对应顺序的多个变量接收即可

变量之间用逗号隔开

支持不同类型数据return

# 演示使用多个变量 接收多个返回值

def test_return():

    return 1,'hhh',False



x, y ,z = test_return()

print(x)

print(y)

print(z)

二、函数多种传参方式

函数参数种类:

根据使用方式的不同,函数中有4种常见的参数使用方式

  • 位置参数

  • 关键字参数

  • 缺省参数

  • 不定长参数

1、位置参数:调用函数时根据函数定义的参数位置来传递参数

注意:

传递的参数和定义的参数顺序及个数必须一致

2、关键字参数:函数调用时通过“键=值”形式传递参数

作用:可以让函数更加清晰,容易使用,同时也清除了参数的顺序需求

注意:

函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面;但是关键字 

3、缺省参数:也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可以不传该默认参数的值(注意:所有位置参数必须出现在默认参数之前,包括函数定义和调用)

作用:当调用函数时没有传递参数,就会使用默认是缺省参数对应的值

注意:

函数调用时,如果为缺省函数传值则修改默认值,否则使用这个默认值

4、不定长参数:也叫可变参数;用于不确定调用的时候会传递多少个参数(不传参也可以)的场景

作用:当调用函数时不确定参数个数,可以使用不定长参数

不定长参数的类型:

1)位置传递

注意:

传进的所有参数都会被args变量收集,它会根据传进的参数位置合并为一个元组(tuple),args是元组类型 这就是位置传递

2)关键字传递

注意:

参数是“键=值”形式的情况下,所有的“键=值”都会被kwargs接受,同时会根据“键=值”组成字典

# 演示多种传参的形式

def user_info(name,age,gender):

    print(f"姓名是{name},年龄是{age},性别是{gender}")





# 位置参数 -默认使用形式 传递的参数和定义的参数顺序及个数必须一致

user_info('piggy',24,'男')

# 关键字参数 -参数之间不存在先后顺序

user_info(name='doggy',age=23,gender='男')

user_info(age=23,name='doggy',gender='男')

user_info('bear',age=23,gender='女')

# 缺省参数(默认值)-不传就按默认值,传了就覆盖默认值 注意默认的参数必须写在最后

def user_info(name,age,gender='男'):

    print(f"姓名是{name},年龄是{age},性别是{gender}")

user_info('Tom',23)

# 不定长 -位置不定长 * 形参作为元组存在接收不定长数量的参数传入

def user_info(*args):

    print(f"args参数的类型是:{type(args)},内容是:{args}")

user_info(1,2,3,'nana')

# 不定长 -关键字不定长 **

def user_info(**kwargs):

    print(f"args参数的类型是:{type(kwargs)},内容是:{kwargs}")

user_info(k1=1,name='baby',k3='ew')

三、匿名函数

1、函数作为参数传递

在之前的函数学习中,我们一直使用的函数都是接收数据作为参数传入:

  • 数字

  • 字符串

  • 字典、列表、元组等

其实,函数本身也可以作为参数传入另一个函数内

如下代码

不难看出,函数compute,作为参数,传入了test_func函数中使用

  • test_func需要一个函数作为参数传入,这个函数需要接收2个数字进行计算,计算逻辑由这个被传入函数决定

  • compute函数需要接收2个数字对其进行计算,compute函数作为参数,传递给了test_func函数使用

  • 最终,在test_func函数内部,由传入的compute函数,完成对数字的计算操作

以上是一种计算逻辑的传递,而非数据的传递

任何逻辑都可以自定义并作为函数传入

# 定义一个函数,接收另一个函数作为传入参数

def test_func(compute):

    res = compute(1,2) #确定compute是函数

    print(f"compute参数的类型:{type(compute)}\n计算结果:{res}")

# 定义一个函数 准备作为参数传入另一个函数

def compute(x,y):

    return x+y

# 调用 并传入参数

test_func(compute)

2、lambda匿名函数

函数定义中

  • def关键字,可以定义带有名称的函数

  • lambda关键字,可以定义匿名函数(无名称)

有名称的函数,可以基于名称重复使用。

无名称的匿名函数,只可以临时使用一次。

匿名函数定义语法:

lambda 传入参数: 函数体(一行代码-计算逻辑 )

  • lambda是关键字,表示定义匿名函数

  • 传入参数表示匿名函数的形式参数,如x,y表示接收两个形式参数

  • 函数体,就是函数的执行逻辑,要注意:只能写一行,无法写多行代码

如下代码可以;

使用def和使用lambda,定义的函数功能完全一致,只是lambda关键字定义的函数是匿名的无法二次使用

# 通过lambda匿名函数的形式,将匿名函数作为参数传入

test_func(lambda x,y:x+y) # 只能用一次,但是很简洁

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

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

相关文章

华为云数据库GaussDB(for Cassandra)揭秘:高性能低成本是什么样的体验?

在我们的日常理念中,追求性价比是最为常见的,但是你知道购买低配置还能享受高性能、低延时、超低价的数据库有哪些吗?今天我们就用数据说话,带你深入了解GaussDB(for Cassandra)挑战高性价比! 众所周知,有…

Android开发者们想想:到底是市场饱和?还是你们技术饱和?

根据我的不客观数据体验来看,最饱和的是iOS,同样发布一个职位iOS是其他技术岗位10倍的投递量。当然Android作为一个已经市场化将近十几年的技术门类,它必然早已经是成熟常态。这样的技术行业都不再会有爆炸式的增长。连同Android硬件、手机、…

Go学习之路:方法和接口(DAY 3)

文章目录前引方法和接口1.1、方法/声明方法1.2、方法/捆绑其他类型1.3、方法/方法常用指针传递1.4、方法/普通函数指针传递和方法指针传递区别2.1、接口/方法签名集合2.2、接口/接口断言2.3、接口/switch case练习题、接口/stringer实现字符串打印2.4、接口/错误前引 昨天终于算…

机器学习5数据归一化Feature Scaling

文章目录一、为什么要数据归一化?二、解决方案数据归一化,解决方案1:最值归一化normalization:解决方案2:均值方差归一化standardization;三、最值归一化处理normalization四、均值方差归一化Standardization一、为什么…

ICMP协议(3层网络层协议:IP、ARP、ICMP)

1、ICMP协议端口号? 没有端口号,向TCP/UDP这些都是没有端口号只有协议号,只有应用层才有端口号。 2、ICMP协议是干什么的? 网络探测与回馈机制 1)网络探测 2)路由跟踪,windows命令:…

ABP:内置logger and 第三方库serilog 之间的关系

今天在看项目的日志记录功能&#xff0c;比较疑惑为什么项目中有的地方使用 Logger< T > _logger 然后又在资源文件下看见日志的第三方库 Serilog 解答&#xff1a; ASP.NET Core Build-in Logging ASP.NET Core 提供了 Logging 的抽象接口, third party 都会依据抽象来…

DJ 12-3 程序控制指令

目录 1. 无条件转移指令 JMP &#xff08;1&#xff09;段内直接转移 &#xff08;2&#xff09;段内间接转移 &#xff08;3&#xff09;段间直接转移 &#xff08;4&#xff09;段间间接转移 2. 条件转移指令 3. 循环控制指令 &#xff08;1&#xff09;LOOP 指令 &…

R语言中不同类型的聚类方法比较

聚类方法用于识别从营销&#xff0c;生物医学和地理空间等领域收集的多变量数据集中的相似对象。我们围绕聚类技术进行一些咨询&#xff0c;帮助客户解决独特的业务问题。它们是不同类型的聚类方法&#xff0c;包括&#xff1a; 划分方法分层聚类模糊聚类基于密度的聚类基于模…

Qt Creator 的 Shadow build(影子构建)

目录 一、什么是影子构建 二、如何取消影子构建 一、什么是影子构建 做wpf项目时&#xff0c;项目里面会有bin文件夹&#xff0c;里面有debug和release文件夹&#xff0c;生成的exe就在debug或release里面&#xff0c;但第一次做qt时&#xff0c;发现项目文件夹里面只有源码文…

2022 JuiceFS 社区用户调研结果出炉

为了使 JuiceFS 的发展更贴合用户的真实需求&#xff0c;我们在三周前向社区发出了一份调研问卷。此次调研面向已经将 JuiceFS 应用于生产环境的用户&#xff0c;了解其在应用 JuiceFS 前和使用中的体验与评价。 参与此次调研的用户&#xff0c;大型企业占比最高&#xff0c;有…

李炎恢ECMAScript6 / ES6+(一)

01. ECMAScript6 简介和历史 学习要点&#xff1a; 1.ES6 简介 2.ECMAScript 历史 3.学习和创建 Demo 本节课我们来开始了解 ECMAScript6(简称 ES6)&#xff0c;着重了解它的标准和历史。 一&#xff0e;ES6 简介 ECMAScript6 简称 ES6&#xff0c;是 JavaScript 语言的下一…

Vue3项目引入 vue-quill 编辑器组件并封装使用

这是一款支持Vue3的富文本编辑器 GitHub地址&#xff1a;https://github.com/vueup/vue-quill/ VueQuill官网&#xff1a;https://vueup.github.io/vue-quill/ // 查看 vueup/vue-quill 版本 npm view vueup/vue-quill versions --json// 导入 vueup/vue-quill 依赖包 npm i v…

试编写算法(用C语言)打印值为x的结点的所有祖先,假设值为x的结点不多于一个。(递归实现和非递归实现)

&#xff08;一&#xff09;递归实现&#xff1a; 完整代码&#xff1a; #include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std;#define MaxSize 100 typedef int ElemType; typedef struct BiNode {ElemType data;BiNode* lchil…

基于springboot摄影跟拍预定管理系统设计与实现的源码+文档

摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计。…

最新版k8s 1.25版本安装

简介 Kubernetes&#xff08;k8s&#xff09;是自动化容器操作的开源平台。这些容器操作包括&#xff1a;部署、调度和节点集群间扩展。 具体功能&#xff1a; 自动化容器部署和复制。实时弹性收缩容器规模。容器编排成组&#xff0c;并提供容器间的负载均衡。 总而言之&…

PHP基于thinkphp的教材管理系统#毕业设计

教材是每个学生和学校都必须具备的教学资源之一,它是知识的载体,是学生汲取知识的土壤,好的教材可以做到事半功倍的效果。但是通常情况下教材都是批量进行购买和发放的,为了能够更好的对教材信息进行管理,我们通过PHP语言,thinkphp框架开发了本次的教材管理系统 教材管理系统,…

谷粒学苑_第十一天

要开始做前台部分(用户环境) 之前我们用的后台前端框架是vue-admin-template 这次的前台框架是用的NUXT 轮播图实现 显示课程和老师 redis缓存 NUXT 服务端渲染技术 解压guli_site 在这里我们使用的是成品,页面也基本写好 然后下载依赖: 开始运行: npm rum dev后面…

[附源码]Python计算机毕业设计Django高校车辆管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

力扣(LeetCode)123. 买卖股票的最佳时机 III(C++)

前后缀分解 维护前缀和数组&#xff0c;保存 111~iii 天&#xff0c;买卖一次的最大利润。维护后缀和数组&#xff0c;保存 iii~nnn 天买卖一次的最大利润。枚举所有分界点 iii &#xff0c;买卖两次的最大利润 iii 的前缀和 i\ i i 的后缀和 111~iii 天买卖一次的最大利润 i\…

Mock测试

1、什么是mock测试 Mock 测试就是在测试活动中&#xff0c;对于某些不容易构造或者不容易获取的数据/场景&#xff0c;用一个Mock对象来创建以便测试的测试方法。 2、Mock测试常见场景 &#xff08;1&#xff09;无法控制第三方系统接口的返回&#xff0c;返回的数据不满足要…