第51讲:Python定义函数时使用*定义个数可变的位置形参

news2024/11/25 16:03:16

文章目录

    • 1.个数可变的位置形参概念
    • 2.定义函数时定义一个个数可变的位置形参
    • 3.个数可变的形参通常位于函数中的最后一个形参

1.个数可变的位置形参概念

定义函数时,如果无法事先确定传递的位置实参的个数,在这种情况下,可以将形参定义为个数可变的位置形参,去接收0个或多个实参,传进来的多个实参最终会被转换成一个元组类型,赋值给形参变量。

所谓的个数可变的位置形参,指的就是这个形参可以接收n个传递的实参。

定义函数时,最多只能定义一个个数可变的位置形参,如果定义多个的话,即使传递再多的实参也都会传递给第一个个数可变的形参,所以不允许一个函数里定义多个个数可变的关键字形参。

在Python的内置函数中,很多函数都定义了个数可变的位置形参,例如print()函数就是典型的代表,我们可以使用print打印无数个任意的数据。在Pycharm中可以把鼠标放在函数上,摁Ctrl键即可跳转到函数的定义。

image-20220820103018945

通常情况下,我们会把个数可变的位置形参定义为最后一个形参,以便接收所有剩余的位置实参。

如果个数可变的位置形参不是函数中的最后一个形参,那么该形参后面的其他形参都只能通过关键字进行传参,或者定义默认值,如果不这么做的话,多个位置实参都会被传递给个数可变的形参,从而就会导致个数可变的形参之后的其他形参没有具体的实参。

2.定义函数时定义一个个数可变的位置形参

定义函数时,最多只能定义一个个数可变的位置形参,如果定义多个的话,即使传递再多的实参也都会传递给第一个个数可变的形参,所以不允许一个函数里定义多个个数可变的关键字形参。

定义个数可变的形参非常简单,只需要在形参的前面添加一个*号,与强制使用关键字传参的*不同,这个*号和是形参连在一起的。

#定义函数时,使用*定义一个个数可变的形参
def fun1(*args):
    print(args)

fun1(1)
fun1(1, 2)
fun1('jiangxl', 1, 2)

第一次调用时,传递了一个实参,第二次调用时传递了两个实参,第三次调用时传递了三个实参,无论传递多少个实参都会被*args个数可变的形参所接收,返回的结果是一个元组。

image-20220820104031428

3.个数可变的形参通常位于函数中的最后一个形参

通常情况下,我们会把个数可变的位置形参定义为最后一个形参,以便接收所有剩余的位置实参。

def fun2(para1, para2, *args):
    funformat = 'para1为:{}, para2为:{}, args为:{}'
    print(funformat.format(para1, para2, args))

fun2('jenkins', 'gitlab', 1, 2, 3, 4, 5)
#输出结果:para1为:jenkins, para2为:gitlab, args为:(1, 2, 3, 4, 5)

将个数可变的形参定义再最后一个形参时,前面普通形参接收传递的对应实参,para1接收Jenkins,para2接收gitlab,其余所有的位置传参都会被最后一个个数可变的形参所接收,并且会将多个位置传参组合成一个元组。

image-20220820104552648

如果个数可变的位置形参不是函数中的最后一个形参,那么该形参后面的其他形参都只能通过关键字进行传参,否则就会抛出异常,或者为后面的形参定义默认值。

如果不这么做的话,多个位置实参都会被传递给个数可变的形参,从而就会导致个数可变的形参之后的其他形参没有具体的实参。

def fun2(para1, *args, para3):
    funformat = 'para1为:{}, para2为:{}, args为:{}'
    print(funformat.format(para1, args, para3))

fun2('jenkins', 1, 2, 3, 4, 5, 'gitlab')	

当前个数可变的形参不是位于函数中的最后一个形参,我们可能希望jenkins实参传给para1形参,1, 2, 3, 4, 5多个位置实参传给*args个数可变的形参,gitlab传给para3形参,但是gitlab并没有使用关键字进行传参,就会被认为也是传给了args个数可变的形参,从而导致para3形参没有对应的实参,最终抛出异常。

image-20220820110355594

如下图所示,个数可变的形参不是函数体中最后一个形参,它会去接收除了para1实参外的所有位置实参,因此就会导致para3无实参值,从而就会抛出异常。

image-20220820111819402

如果我们非要让个数可变的形参位于中间,那么个数可变的形参后面的形参,必须使用关键字传参。

fun2('jenkins', 1, 2, 3, 4, 5, para3 = 'gitlab')

#输出结果:para1为:jenkins, para2为:(1, 2, 3, 4, 5), args为:gitlab

或者将个数可变的形参后面的形参设置默认值。

def fun2(para1, *args, para3 = 'haha'):
    funformat = 'para1为:{}, para2为:{}, args为:{}'
    print(funformat.format(para1, args, para3))

fun2('jenkins', 1, 2, 3, 4, 5, 'gitlab')

#输出结果:para1为:jenkins, para2为:(1, 2, 3, 4, 5, 'gitlab'), args为:haha

通过这两种方法,都不会再抛出异常了。

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

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

相关文章

AutoAI 2023峰会观察:数据驱动变革,迎接智驾未来

在驶向智驾未来的科技之路上,数据正在发挥什么样的重要作用? AutoAI 2023中国峰会盛大召开 近日,AutoAI 2023第六届无人驾驶及智能驾舱中国峰会在上海盛大召开,AutoSec 7周年年会暨中国汽车网络安全与数据安全合规峰会也于同期一起…

老手机安装apk包时出现[解析包时出现错误]

问题 在老手机上安装打包好的apk时出现了“解析包时出现错误” 环境 手机 型号:华为、荣耀Android版本: 6.0 开发环境 gradle 6.9.2Android Studio 4.2.1minSdkVersion 23 解决 打包时只使用V1签名。 总结分析 因为Android7以上,引入使…

气氛热烈 金句频出!一文看尽网易科技首期AIGC创新社沙龙

GPT狂飙,AI突进。 无数人的热情被点燃,振臂高呼“AI的iPhone时刻已经到来”。面对时代新机遇,创业者闻风而动,投资人竞相追逐,巨头纷纷入局。未来会怎样?没人能给出确切的答案。 但是,几乎已成共…

《嵌入式系统开发实践》实验三 进程通信

一、 实验目的 掌握无名管道与有名管道的进程通信;掌握消息队列的读写操作;掌握共享内存的通信机制。 二、 实验任务与要求 管道读写程序的编写与应用;消息队列的发送和接收程序的编写和应用;共享内存的创建、连接和分离编程和…

ptp4l测试-LinuxPTP\ptp4l配置与问题排查

目录 一、前言 1.1 什么是ptp4l 1.2 描述 1.3 官网连接 1.4 目的 1.5 平台 二、 平台必要软件 2.1 linux物理机 2.2 imx6ull开发板 三、检查硬件是否支持 3.1 ifconfig查看当前网卡的名称 3.2 ethtool检查驱动和网卡是否支持 四、开启ptp4l服务 4.1 方法一&#x…

Windows远程访问本地 jupyter notebook服务

文章目录 前言视频教程1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook,它是一个交互式的数据科学和计算环境,支持多种编程语言&#…

图像滤波概述

什么是图像滤波 1.图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。 2.消除图像中的噪声成分叫作图像的平滑化或滤波操…

霍尔电流传感器在直流列头柜的应用

摘要:数据中心供电电源质量的好坏直接影响到IT设备的安全运行,因此对数据中心直流列头柜电源进出线实行监测非常重要,而通过霍尔电流传感器可以采集主进线电流、多路支路直流电流和漏电流。 关键词:数据中心;直流列头柜…

MySQL-多表查询(下)

♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️树高千尺,落叶归根人生不易&…

统计:SEM standar deviation of the mean [延长仪表周期 技术点]

平均值标准误差(SEM, standard deviation of the mean) SD:样本标准差 分母(n-1) SD与SEM区别: 1.SD量化了样本分散值之间的差值有多大; 2.SEM量化了对总体实际平均值的了解程度。其考虑了SD的值和样本量&…

day11 - 手写数字笔迹细化

手写数字笔迹细化 对于手写数字识别实验中,经常会遇到因为笔迹较粗导致误识别的情况,所以我们通常会先将笔迹进行细化,笔迹变细以后,数字的特征会更明显,后续进行识别的准确率就会更高。 例如数字7 和 1 &#xff0c…

2019下半年上午题

2019下半年上午题 b 选a c 最后统一单位 计算需要多少片芯片: 流水线: 也就是: 对于这一道题: c ssl:安全套接层 https:安全通道 PGP:电子邮件加密 d b a b b 受委托方和委…

WWDC2023|苹果已邀请多家VR/AR领域媒体,有望推出首款头显设备

据9to5mac报道,苹果已邀请多位VR/AR领域的记者和创作者参加今年WWDC开发者大会,其中包括UploadVR编辑Ian Hamilton、经常测试AR/VR产品的Norman Chan等,这表明苹果有望推出该领域的相关产品和服务,例如首款VR/AR头显。 根据此前…

动态规划-树形DP

树的重心 题目 链接:https://www.acwing.com/problem/content/848/ 给定一颗树,树中包含 n n n 个结点(编号 1 ∼ n 1 \sim n 1∼n)和 n − 1 n-1 n−1 条无向边。 请你找到树的重心,并输出将重心删除后&#x…

免费使用GPT4.0?搭载多模态的全新New Bing开放使用教程

目录 1 微软发布新必应2 支持文本生成图像3 支持多模态回答4 历史记录和回答导出5 支持插件化导入 1 微软发布新必应 5月4日,微软基于ChatGPT的搜索引擎New Bing发布了一次大规模更新,并宣布已开放给所有用户,现在无需再排队等待&#xff0c…

实力上榜!ONES 荣获深圳市「专精特新」企业认定

近日,ONES 成功入选 2022 年深圳市专精特新中小企业名单,这标志着 ONES 在研发管理领域专业化、企业数字化程度、质量管理水平、研发创新水平等多个方面得到充分认可和肯定。 深圳市专精特新企业评选是以工业和信息化部、国家统计局、国家发展改革委、财…

Live800:客服系统知识库建设中需要注意的三个要点

互联网的快速发展,让客服行业也随之发生着巨大的变化。传统的客服方式越来越难以满足人们的需求,客户对客服的要求也变得越来越高。在这种情况下,客服系统成为了一种必不可少的工具。 客服系统作为企业与客户沟通的重要渠道,其之所…

聚观早报 | 微软Build开发者大会开幕;阿里云智能裁员7%

今日要闻:微软Build开发者大会开幕;阿里云智能裁员7%;亚马逊中国宣布停止应用商店服务;苹果汽车项目启动已近10年;阿迪达斯中国将重新出售YEEZY系列 微软Build开发者大会开幕 5 月 24 日消息,继两周之前谷…

linux怎么重置密码,CentOS忘记密码,怎么重置密码

1、打开虚拟机 2、在这个界面按 e 进入到这个界面 3、下滑到这个地方,添加这部分代码 init/bin/sh (手动输入,虚拟机算是另一台电脑,复制不过去的) 4、填写完成后按 ctrlx 引导启动 5、输入 mount -o remount, rw / 输入 passwd xxx PS…

Jenkins+GitLab+Docker搭建前端自动化构建镜像容器部署(无本地证书,映射证书)

前言 🚀 需提前安装环境及知识点: 1、Docker搭建及基础操作 2、DockerFile文件描述 3、Jenkins搭建及基础点 🚀 目的: 将我们的前端项目打包成一个镜像容器并自动发布部署,可供随时pull访问 一、手动部署镜像及容器 1…