*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 - 计算一…

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

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

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

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

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

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

国际刑警组织逮捕 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,的方式不允许访问静态资源。 我们只希望用户通过反向代理服务器才可以拿到我们的静态资源,不希望别的服务器通过二次请求拿到我们的静态资源。 盗链是指在自己的页面上展示一些并不在自己服务…

badgerdb里面的事务

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

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

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

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

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

前馈神经网络dropout实例

直接看代码。 (一)手动实现 import torch import torch.nn as nn import numpy as np import torchvision import torchvision.transforms as transforms import matplotlib.pyplot as plt#下载MNIST手写数据集 mnist_train torchvision.datasets.MN…

基于开源模型搭建实时人脸识别系统(四):人脸质量

续人脸识别实战之基于开源模型搭建实时人脸识别系统(三):人脸关键点、对齐模型概览与模型选型_CodingInCV的博客-CSDN博客 不论对于静态的人脸识别还是动态的人脸识别,我们都会面临一个问题,就是输入的人脸图像的质量可…

使用 OpenTelemetry 构建可观测性 04 - 收集器

在之前的博文中,我们讨论了如何使用 SDK 和链路追踪生产者来导出进程中的遥测数据。尽管有多种类型的导出器可供选择,但其中一个常见的目标是将数据导出到 OpenTelemetry Collector。本篇文章将深入探讨收集器以及如何使用它。 选 OTel Collector 还是…

Eduma主题 - 线上教育WordPress主题/网站

Eduma主题 – 线上教育WordPress主题是为教育网站、LMS、培训中心、课程中心、学院、大学、学校、幼儿园而制作的。基于我们使用以前的主题eLearning WP构建WordPress LMS的经验,Education WP是下一代,也是围绕WordPress最好的教育主题之一,它…

一个炫酷的头像悬停效果 2

基于上次翻译的 🔥🔥一个炫酷的头像悬停效果 收获了不少同学的喜欢,原作者近期进行了优化升级。本文将升级后的核心实现过程进行梳理讲解,如果没看过第一期的推荐先看看第一期的实现过程。升级后的效果如下图所示。 gif动画效果如…