*args无疑是解决函数重载的一大创新利器--我用可变数量参数解决了函数重载问题

需求分析

        最近遇到这样一个需求:根据用户传递的不同参数数量执行不同的功能。我这几天一直在思考这个问题:如何根据参数数量去执行不同的功能,最初的设想是把不需要的参数设置为NONE或者""再或者" "(后两者引号均表示传空值的意思),但是呢,运行的时候对这些为空的参数会出现解析错误,导致我很烦,明明paser解析的时候可以使这些参数为空,为什么我传参数就不能为空???气死气死,一定是代码的问题。哦,等等,代码的问题,那不就是我的问题?不解决问题就解决出问题的人,我这么自爱,我选择解决问题。

初步设想

        这个需求很明显是函数重载(关于函数重载,请参考这个链接):无非就是把代码copy几份,然后将函数的参数列表改为每个功能所需要的即可,调用的时候只需判断一下调用的哪个功能就执行哪个函数就ok了,perfect!!!

        but,wait,wait!我这主函数的代码可是都杂糅在一起 ,有800多行,复制三份就是2400多行,关键是,绝大部分代码都是不动,改变的只有一小部分而以。我要这样做,真传出去,还不说我是个小白!!!不能忍,坚决不能忍!

进一步构想

        我记得python中有一个参数"**args"可以处理多个变量的问题,干脆用这个!

         改完这个之后,我原来的args就不能用了,很显然(其实也没那么显然,我是看了报错信息才知道的),命名冲突了。于是把原来的args换成了其他的(如opt)就可以了。但是但是,又报错了!!!

TypeError: main() takes 0 positional arguments but 3 were given

        啊,这!还有人嫌参数少?不应该啊,查一下!

在 Python 中,*args**kwargs 分别用于接受可变数量的位置参数和关键字参数。如果你将 *args 写成了 **args,会导致错误,因为它们的语法和含义是不同的。

当你使用 **args 时,Python 会认为你正在使用关键字参数字典。这会导致将传递的关键字参数收集到一个字典中,而不是像 *args 那样收集位置参数到元组中。由于这两种参数类型是不同的,因此将 *args 写成 **args 会导致语法错误。

        斯高一,原来是多给了一个星,还是不能太大方,该一个就一个!改完之后,完美运行!

 完结撒花

       解决完这个之后第一想法就是写下来纪念自己又蠢又笨的经历,写下来还挺轻松的。当然可变参数数量不仅可以用“*args”还可以用“**kwargs”,朋友们,我说什么朋友们,不怪我记错,是他俩太像,导致我记混了!那希望大家不要混淆,详细的用法请查看:*args & **kwargshttps://www.geeksforgeeks.org/args-kwargs-python/也可以看这位博主:【Python】`*args` 和 `**kwargs`的用法【最全详解】https://blog.csdn.net/GODSuner/article/details/117961990?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-117961990-blog-125363261.235%5Ev38%5Epc_relevant_default_base3&spm=1001.2101.3001.4242.2&utm_relevant_index=4

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

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

相关文章

Flink 流式读写文件、文件夹

文章目录 一、flink 流式读取文件夹、文件二、flink 写入文件系统——StreamFileSink三、查看完整代码 一、flink 流式读取文件夹、文件 Apache Flink针对文件系统实现了一个可重置的source连接器,将文件看作流来读取数据。如下面的例子所示: StreamExe…

【无标题】QT应用编程: QtCreator配置Git版本控制(码云)

QT应用编程: QtCreator配置Git版本控制(码云) 感谢:DS小龙哥的文章,这篇主要参考小龙哥的内容。 https://cloud.tencent.com/developer/article/1930531?areaSource102001.15&traceIdW2mKALltGu5f8-HOI8fsN Qt Creater 自带了git支持。但是一直没…

软件测试学术顶会——ISSTA 2023 论文(网络安全方向)清单、摘要与总结

总结 本次会议涵盖的安全研究主题广泛,包括源代码分析、二进制代码分析、恶意软件检测、漏洞检测、模糊测试、程序验证等。一些热门的研究方向包括:基于机器学习的漏洞检测、大型语言模型在软件安全中的应用、区块链智能合约安全分析。这些方向都在最近几年持续发展。一些较冷门…

【C++】IO流

C语言的输入和输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键 盘)读取数据,并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。 注意宽度输出和精度输出控制。C语言借助了相应的缓冲区…

postgresql 分组

postgresql 数据汇总 分组汇总聚合函数注意 总结 分组统计总结 高级分组总结 分组汇总 聚合函数 聚合函数(aggregate function)针对一组数据行进行运算,并且返回单个结果。PostgreSQL 支持以下常见的聚合函数: • AVG - 计算一…

redis--数据类型

数据类型 String 描述:String类型是Redis中最基本的数据类型,它可以存储任何二进制数据,最大长度为512MB。尽管它被称为"字符串",但它实际上可以用于存储多种类型的数据,包括文本、整数、浮点数和二进制数…

在思科(Cisco)路由器中使用 SNMP

什么是SNMP SNMP,称为简单网络管理协议,被发现可以解决具有复杂网络设备的复杂网络环境,SNMP 使用标准化协议来查询网络上的设备,为网络管理员提供保持网络环境稳定和远离停机所需的重要信息。 为什么要在思科设备中启用SNMP S…

神经网络基础-神经网络补充概念-49-adam优化算法

概念 Adam(Adaptive Moment Estimation)是一种优化算法,结合了动量梯度下降法和RMSProp的优点,用于在训练神经网络等深度学习模型时自适应地调整学习率。Adam算法在深度学习中广泛应用,通常能够加速收敛并提高模型性能…

基于springboot+vue的论坛系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

机器学习赋能乳腺癌预测:如何使用贝叶斯分级进行精确诊断?

一、引言 乳腺癌是女性最常见的恶性肿瘤之一,也会发生在男性身上。每年全球有数百万人被诊断出乳腺癌,对患者的生活和健康造成了巨大的影响。早期的乳腺癌检测和准确的诊断对于提高治疗的成功率至关重要。然而,乳腺癌的早期诊断面临着许多挑战…

【TypeScript】枚举类型

在 TypeScript 中,枚举(Enum)是一种用于定义命名常量集合的数据类型。枚举使代码更加可读和可维护,因为它们为一组具有语义的值提供了命名。 以下是 TypeScript 中枚举的基本用法和特点: // 声明一个枚举 enum Direc…

国际刑警组织逮捕 14 名涉嫌盗窃 4000 万美元的网络罪犯

Bleeping Computer 网站披露,4 月份,国际刑警组织发动了一起为期四个月,横跨 25 个非洲国家的执法行动 “Africa Cyber Surge II”,共逮捕 14 名网络犯罪嫌疑人,摧毁 20000 多个从事勒索、网络钓鱼、BEC 和在线诈骗的犯…

ubuntu20.04共享文件夹—— /mnt/hgfs里没有共享文件夹

参考文章:https://blog.csdn.net/Edwinwzy/article/details/129580636 虚拟机启用共享文件夹后,/mnt/hgfs下面为空,使用 vmware-hgfsclient 查看设置的共享文件夹名字也是为空。 解决方法: 1. 重新安装vmware tools. 在菜单…

【高光谱图像的去噪算法】通过全变异最小化对受激拉曼光谱图像进行去噪研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

nginx防盗链

防盗链介绍 通过二次访问,请求头中带有referer,的方式不允许访问静态资源。 我们只希望用户通过反向代理服务器才可以拿到我们的静态资源,不希望别的服务器通过二次请求拿到我们的静态资源。 盗链是指在自己的页面上展示一些并不在自己服务…

Programming abstractions in C阅读笔记:p123-p126

《Programming Abstractions In C》学习第50天,p123-p126,总结如下: 一、技术总结 1.notaion 这也是一个在计算机相关书籍中出现的词,但有时却不是那么好理解,因为它可以指代很多对象,这里做一个记录。示…

badgerdb里面的事务

事务的ACID A 原子性(Atomicity) 多步骤操作,只能是两种状态,要么所有的步骤都成功执行,要么所有的步骤都不执行,举例说明就是小明向小红转账30元的场景,拆分成两个步骤,步骤1&#…

【Windows系统编程】06.HotFixHook与进程通信(详解HotFixHook)

上一讲讲到的InlineHook,每次Hook的时候,都要读写两次内存(先Hook,再还原)这种Hook方式,性能比较低,今天我们讲的这种Hook方式,可以说是InlineHook的升级版本 HotFix(热…

数据对齐(结构体对齐、类成员对齐、动态内存对齐/指针对齐、函数参数对齐、SIMD对齐)

数据对齐 数据对齐是一种计算机内存管理技术,确保数据存储在内存中的特定地址上,以提高访问效率和性能。 不同的数据类型(如整数、浮点数、指针等)在内存中的存储位置通常需要满足特定的边界要求,即数据的起始地址是其…

公众号11周年,终于向公域流量打开了大门

是的,在这篇文章要发布之前,看了下日期,才惊觉明天就是公众号11周年了。 时间真的过得飞快,总觉得10周年刚过不久。 已经11年的公众号,或许少了很多关注,或许很多目光也被视频号夺去了。 但让人欣喜的是…