为了考虑为什么 python 不提供函数重载,首先我们要研究为什么需要提供函数重载。

函数重载主要是为了解决两个问题。
1。可变参数类型。
2。可变参数个数。

另外,一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函数的功能其实不同,那么不应当使用重载,而应当使用一个名字不同的函数。

好吧,那么对于情况 1 ,函数功能相同,但是参数类型不同,python 如何处理?答案是根本不需要处理,因为 python 可以接受任何类型的参数,如果函数的功能相同,那么不同的参数类型在 python 中很可能是相同的代码,没有必要做成两个不同函数。

那么对于情况 2 ,函数功能相同,但参数个数不同,python 如何处理?大家知道,答案就是缺省参数。对那些缺少的参数设定为缺省参数即可解决问题。因为你假设函数功能相同,那么那些缺少的参数终归是需要用的。

好了,鉴于情况 1 跟 情况 2 都有了解决方案,python 自然就不需要函数重载了。

作者:pansz
链接:https://www.zhihu.com/question/20053359/answer/14054112
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

为什么 Python 不支持函数重载?其他函数大部分都支持的?相关推荐

  1. 函数重载和 函数模板

    一.函数重载(overload) #include <iostream> using namespace std;//计算两个参数a,b的乘积的函数 int product(int a,i ...

  2. 函数重载(续)==》函数重载和函数指针在一起

    函数重载与函数指针(这一块很重要,后续要继续学习): 当使用重载函数名对函数指针赋值时 根据重载规则挑选与函数指针参数列表一致的候选者 严格匹配候选者的函数类型与函数指针的函数类型 #include ...

  3. C++深度解析 类中的函数重载 -- 全局函数,普通成员函数,静态成员函数(28)

    C++深度解析 类中的函数重载 -- 全局函数,普通成员函数,静态成员函数(28) 函数重载的回顾 函数重载的本质为相互独立的不同函数 C++中通过函数名和函数参数确定函数调用 无法直接通过函数名得到 ...

  4. 【C#】面向过程(18)——函数重载(函数重名)

    函数重载(函数重名): 1.构成重载的条件:参数类型不同或者参数个数不同(不严谨的),与返回值无关. 2.函数重载:同名的两个函数的签名(参数的类型.顺序.个数)不能完全一致,否则就会异常.当两个函数 ...

  5. 函数重载与函数模板的比较

    函数重载与函数模板是两个有些相似的概念,它们使用的函数名都一样,但用处不同.下面对两者进行简要介绍并指出它们的区别和联系. 函数重载(overloaded) 即定义函数名相同而形参列表(形参个数或形参 ...

  6. 当函数重载遇到函数默认值、函数指针

    当函数重载遇到函数默认值.函数指针 一.当函数重载遇到函数默认值: 当我们的重载函数遇到函数有默认值的情况,编译器还能不能正确的做出合理的判断,下面我们通过实验来给出答案,下面是两个非常简单的重载函数 ...

  7. c语言中 允许函数重载么,简述C++语言支持函数重载问题介绍

    对于C++语言作为一种欲与C兼容的语言,C++语言保留了一部分过程式语言和特点,foo_int_int这样的名字包含了函数名.函数参数数量及类型信息,C++语言就是靠这种机制来实现函数重载的. 因而它 ...

  8. C++ 实验2:函数重载、函数模板、简单类的定义和实现

    1.函数重载编程 编写重载函数add(),实现对int型,double型,Complex型数据的加法.在main()函数中定义不同类型 数据,调用测试. #include <iostream&g ...

  9. 函数重载、函数模板在四轴飞行器中的实际应用

    1.今日主题 背景: 曾经在大三参加2017全国大学生电子设计竞赛,当时做的是四旋翼自主飞行器探测跟踪的题目,我是负责主控这一块的,中后期整个过程主要都是调试,在调试的过程中,我们需要将飞行器的各类数 ...

最新文章

  1. Android中获取手机的IMEI
  2. python 获取当前ip
  3. C/C++面试题目集锦
  4. MATLAB GUI界面显示不全的解决办法
  5. Pwn_9 作业讲解
  6. vscode安装python插件失败_vscode插件安装失败的解决方案
  7. 【选型】项目方案总体设计--选型
  8. python场景识别_python 场景
  9. php 实现背景图片轮换,纯js实现背景图片切换效果代码
  10. cpu核心分配给不同进程linux,Linux技巧:多核下绑定硬件/进程到不同CPU
  11. 项目管理软件-禅道-内网部署
  12. catia二次开发:结构树文档,录制宏编程思路,遍历结构树,catia根对象窗体属性,打开导出文件,cameras工具条,viewer对象和截图,catia发送命令
  13. 全球营商环境报告及数据(2004-2020年)
  14. GD32篇 一、GD32程序设置读保护,防止程序被读取
  15. 戴尔linux改win7教程视频,戴尔笔记本win10改win7系统BIOS设置详细教程
  16. 基于itextpdf java pdf添加水印后,部分文档无法显示水印的问题
  17. 项目4:后台管理的开发和使用(前端)
  18. 单点登录cas常见问题(九) - android app怎么接入cas单点登录系统?
  19. UVA 10118 dfs
  20. 闲鱼冻结多个欺诈用户:还是治标不治本

热门文章

  1. 描述统计学与推断统计学的理解、联系、区别
  2. 在 Ubuntu 上添加或删除 PPA 存储库
  3. QT 简单仿写QQ界面
  4. outlook express: socket error 10053 0x800ccc0f
  5. java抓包asp_asp 之上传漏洞终结篇
  6. Symbian OS SDKs简介(转)
  7. java内部类多继承_内部类和多继承
  8. 解决vscode远程连接服务器的Extension activation failed问题
  9. 云智慧助力MLOps加速落地
  10. 移植u-boot-2016.11到TQ2440开发板全过程记录