Python学习——【5.1】函数多返回值、函数多种传参方式、匿名函数

文章目录

  • 【5.1】函数多返回值、函数多种传参方式、匿名函数
    • 一、函数多返回值
    • 二、函数多种传参方式
      • (一)位置参数
      • (二)关键字参数
      • (三)缺省参数
      • (四)不定长参数
      • ※、总结
    • 三、匿名函数
      • (一)函数作为参数传递
      • (二)lambda匿名函数

【5.1】函数多返回值、函数多种传参方式、匿名函数

一、函数多返回值

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

def test_return():return 1, "hello", Truex, y, z = test_return()print(x)  # 1
print(y)  # hello
print(z)  # True

  说明:按照返回值的顺序,写对应顺序的多个变量即可进行接收。

  注意:

  1.变量之间用逗号隔开;

  2.支持不同类型的数据一并return。

二、函数多种传参方式

  根据使用方式上的不同,函数有四种常见的参数使用方式:

  • 位置参数;
  • 关键字参数;
  • 缺省参数;
  • 不定长参数。

(一)位置参数

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

def user_info(name, age, gender):print(f"您的名字是{name},年龄是{age},性别是{gender}")# 位置传参
user_info("Tom", 20, "男")

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

(二)关键字参数

  函数调用时通过“键=值”形式传递参数。

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

def user_info(name, age, gender):print(f"您的名字是{name},年龄是{age},性别是{gender}")# 关键字传参
user_info(name="小明", age=20, gender="男")# 可以不按固定顺序
user_info(age=20, gender="男", name="小明")# 可以和位置参数混用,但是位置参数必须在前,且位置参数要对应参数顺序
user_info("小明", age=20, gender="男")

(三)缺省参数

  缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可以不传该默认参数的值。(注意:所有位置参数都必须出现在默认参数前,无论是函数定义还是调用时)

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

def user_info(name, age, gender="男"):print(f"您的名字是{name},年龄是{age},性别是{gender}")user_info("Tom", 20)
user_info("Rose", 18, "女")

  注意:函数调用时,如果给缺省参数传值,就用传入的值,否则默认使用缺省参数的默认值。

(四)不定长参数

  不定长参数也叫可变参数,用于不确定调用的时候会传递多少个参数(不传参,即传参0个也可以)的场景。

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

  不定长参数的类型:

  1.位置传递;

  2.关键字传递。

位置传递的不定长参数

def user_info(*args):print(args)user_info("Tom")  # ('Tom',)user_info("Tom", 18)  # ('Tom', 18)

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

关键字传递的不定长参数

def user_info(**kwargs):print(kwargs)user_info(name="Tom", age=18, id=110)  # {'name': 'Tom', 'age': 18, 'id': 110}

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

※、总结

位置参数

  根据参数位置来传递参数。

关键字参数

  1.通过“键=值”形式传递参数,可以不限制传参顺序;

  2.可以和位置参数混用,但需要把位置参数排在前。

缺省参数

  1.不给缺省参数传参,则使用默认值;

  2.缺省参数的传参必须在所有参数的最后。

不定长参数

  1.位置传递的不定长参数以*号标记形式参数,以元组的形式接受若干个参数。形式参数一般命名为args(不强制,只是约定俗成的规范)。

  2.关键字传递的不定长参数以**号标记形式参数,以字典的形式接受若干个参数,形式参数一般命名为kwargs

三、匿名函数

(一)函数作为参数传递

  在前面的函数学习中,我们一直使用的函数,都是接收数据作为参数传入,例如数字、字符串、字典、列表、元组等。

  但是实际上,我们学习的函数,它自身也可以作为参数传入另一个函数内。

  如下代码:

def test_func(compute):result = compute(1, 2)print(result)def compute(x, y):return x + ytest_func(compute)  # 3

  函数compute作为参数,传入了test_func函数中使用。

  1.test_func需要一个函数作为参数传入,这个函数需要接收两个数字进行计算,具体怎么计算是由这个传入的函数所决定的;

  2.compute函数接收两个数字对其进行计算,且compute函数作为参数传递给了test_func函数去使用;

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

  所以,这是一种**“计算逻辑”的传递**,而非数据的传递。

  上述代码是“两数相加”这种计算逻辑的传递。但事实上,不仅是加减乘除,任何逻辑都可以自行定义成函数并作为参数传入其他函数内

  重新审视并对比一下“函数作为参数传递”与“数据作为参数传递”,如下:

def test_func(compute):result = compute(1, 2)print(result)def compute(x, y):return x + y

  可见,对于test_func而言,它是“要处理的数据”已经提供了,但“以怎样的逻辑对数据进行处理”并未提供。所以它实际上是不缺少数据的,缺少的是数据的执行逻辑。

def add(x, y):return x + yresult = add(1, 2)

  可见,对于add而言,它是提供了“处理逻辑”,即两个数作加法并返回,但是具体的数据并未提供。所以它实际上是不缺少数据的处理逻辑的,缺少的是具体数据。

  而缺什么就要将什么以参数的形式传参进来。所以前者是将函数(即封装好的逻辑体)传进来,后者是将若干具体数据传进来。

(二)lambda匿名函数

  函数的定义中,

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

  2.lambda关键字,可以定义匿名函数(即无名称的函数)。

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

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

  语法如下:

# 匿名函数定义语法
lambda 传入参数: 函数体# (注:函数体只能是一行代码)

  说明:

  1.lambda是关键字,表示定义匿名函数;

  2.传入参数表示匿名函数的形参,如:x, y表示接受两个形参;

  3.函数体就是函数的执行逻辑,注意只能写一行代码,不能写多行代码。

  如下代码:

def test_func(compute):result = compute(1, 2)print(result)def compute(x, y):return x + y

  我们如果使用lambda匿名函数的方式进行一番改写,则如下所示:

def test_func(compute):result = compute(1, 2)print(result)test_func(lambda x, y: x + y)  # 3

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

  注意事项:

  1.匿名函数用于临时构建一个函数、只用一次的场景。

  2.匿名函数的定义中,函数体只能写一行代码,如果函数体要写多行代码,则不可用lambda匿名函数,应使用def定义带名函数。

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

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

相关文章

【第十九章:Sentosa_DSML社区版-机器学习之模型评估】

目录 19.1 评估 19.2 混淆矩阵 19.3 ROC-AUC 19.4 时间序列模型评估 【第十九章:Sentosa_DSML社区版-机器学习之模型评估】 19.1 评估 1.算子介绍 评估算子(EvaluationNode) 用于评估用当前数据训练出来的模型的正确性,显示对模型各个评价指标的具…

从零预训练一个tiny-llama#Datawhale组队学习Task2

完整的教程请参考:datawhalechina/tiny-universe: 《大模型白盒子构建指南》:一个全手搓的Tiny-Universe (github.com) 这是Task2的学习任务 目录 Qwen-blog Tokenizer(分词器) Embedding(嵌入) RMS …

个人行政复议在线预约系统开发+ssm论文源码调试讲解

第二章 开发工具及关键技术介绍 2.1 JAVA技术 Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterprise JavaBeans)的全面支持,java servlet API,JSP(java server pages…

武汉正向科技 格雷母线定位系统生产厂家

为了适应机车无人化项目对地址高精度的要求,我们推出了高精度格雷母线,根据地址的检测原理,地址精度取决于格雷母线最小交叉环的精度,传统的格雷母线内胆采用柔性泡沫内胆(图片1),格雷母线最小交…

末端无人配送产业链

末端无人配送产业链涵盖部件、系统、整车制造、运营服务、应用场景等五大环节。 四类企业竞逐末端配送,“科技公司物流企业”成最佳CP、平台公司蓄势待发

浏览器指纹修改指南2024 -了解SpeechVoice(四)

引言 随着互联网技术的飞速发展,用户隐私保护的重要性日益凸显。浏览器作为我们访问互联网的主要工具之一,其独特的指纹信息却成为了用户隐私的一大隐患。浏览器指纹技术利用浏览器的各种特性,如用户代理(User Agent)、字体列表、插件等,生成一个独一无二的识别码,使得用户即便…

详细分析SpringMvc中HandlerInterceptor拦截器的基本知识(附Demo)

目录 前言1. 基本知识2. Demo3. 实战解析 前言 对于Java的基本知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新) 1. 基本知识 HandlerInter…

MFC - 复杂控件_2

前言 各位师傅大家好,我是qmx_07,今天讲解剩下的复杂控件知识点 IP地址栏 绘图准备: 调整windows窗口大小、设置 ip address control设置 Button按钮,修改名称 添加IP栏 变量:m_IP 获取IP栏内容 void CMFCApplication3Dlg::…

C++中的string模拟实现

上一章讲了库中的string函数&#xff0c;这次我们来讲一讲模拟实现 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<assert.h> using namespace std; //域名 namespace zzj {class String {public:typedef char* iterator;typedef const char* cons…

【Java 问题】基础——Java 概述

Java 概述 1. 什么是 Java ?2. Java 语言有哪些特点3. JVM、JDK 和 JRE 有什么区别&#xff1f;4. 说说什么是跨平台性&#xff1f;原理是什么&#xff1f;5. 什么是字节码&#xff1f;采用字节码的好处是什么&#xff1f;6. 为什么说 Java 语言 "编译与解释并存"?…

将 Go 作为脚本语言用及一些好用的包

前言 Go 作为一种可用于创建高性能网络和并发系统的编程语言&#xff0c;它的生态应用变得越来越广泛&#xff0c;同时&#xff0c;这也激发了开发人员使用 Go 作为脚本语言的兴趣。虽然目前 Go 还未准备好作为脚本语言 “开箱即用” 的特性&#xff0c;用来替代 Python 和 Ba…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【Perf调测】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 基本概念 Perf为性能分析工具&#xff0c;依赖PMU&#xff08;Per…

HTML讲解(三)通用部分

目录 1.空格标记 2.特殊文字的标记 3.注释语句 4.对文字字体的设置 5.修改文字形态 6.换行标记 7.居中标记 8.水平线标记 9.设置滚动弹幕 1.空格标记 在HTML中&#xff0c;我们想打印空格并不能直接敲一个空格键&#xff0c;因为如果是敲空格键&#xff0c;那无论你敲…

2万字长文超全详解!深度学习时代阴影检测、去除与生成在图像与视频中的全面综述

论文链接&#xff1a;https://arxiv.org/pdf/2409.02108 Github链接&#xff1a;https://github.com/xw-hu/Unveiling-Deep-Shadows 亮点直击 深度学习时代阴影分析的全面综述。本文对阴影分析进行了深入的综述&#xff0c;涵盖了任务、监督级别和学习范式等各个方面。本文的分…

SpringBoot整合ELK实现日志监控(保姆级教程)

新建SpringBoot项目 pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.…

虚幻引擎的三种输入模式和将控件显示到屏幕上

首先要知道一个概念 , HUD 和 Input 都是由 PlayerController 来控制的 而虚幻的Input控制模式有三种 Set Input Mode Game Only (设置输入模式仅限游戏): 视角会跟着鼠标旋转 , 就是正常游戏的模式 , 这也是游戏默认输入模式 Set Input Mode UI Only (设置输入模式仅限UI): …

231. 2 的幂 简单递归 python除法的类型

已解答 简单 相关标签 相关企业 给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 示例 1&#xff1a; 输入&…

傅里叶变换(对称美)

傅里叶变换&#xff08;对称美&#xff09; 冲浪时发现的有趣文章&#xff0c;学习自https://zhuanlan.zhihu.com/p/718139299 摘下来的内容&#xff1a; 傅里叶变换之所以“怪美的嘞”&#xff0c;根本在于它有一种内在的对称性&#xff0c;这一点在上面的图并没有表现出来…

保障电气安全的电气火灾监控系统主要组成有哪些?

电气火灾是什么&#xff1f; 电气火灾一般是指由于电气线路、用电设备、器具以及供配电设备出现故障性释放的热能&#xff1a;如高温、电弧、电火花以及非故障性释放的能量&#xff1b;如电热器具的炽热表面&#xff0c;在具备燃烧条件下引燃本体或其他可燃物而造成的火灾&…

移动端列表筛选封装

适合场景&#xff1a;Vue2vant 移动端项目&#xff0c;数据填充添加全部选项及相关逻辑处理&#xff0c;支持多选、单选以及筛选状态返回 效果图 选中交互 使用说明 <filter-box ref"filterBox" :isMultiple"true" //是否多选:params"waitData&q…