为什么Python不支持函数重载而其他语言大都支持

Yang 597

Python不支持函数重载主要有两点原因:一、python是一种动态语言;二、函数重载主要解决两个问题。在静态语言中,方法重载是希望类可以以统一的方式处理不同类型的数据提供可能。多个同名函数同时存在,具有不同的参数个数/类型,重载是一个类中多态性的一种表现。

一、 Python 是一种动态语言

在静态语言中,方法重载是希望类可以以统一的方式处理不同类型的数据提供可能。多个同名函数同时存在,具有不同的参数个数/类型,重载是一个类中多态性的一种表现。

Python 不支持函数重载是因为 Python 是一种动态语言,变量的类型是动态的,程序运行期间变量类型可以随意变化。由于 Python 的变量是没有固定类型的,而函数重载却依赖变量类型,重载就是定义多个同名函数,但这些同名函数的参数类型不同,传入不同类型的参数时执行与之对应的函数。因此,Python 不支持函数重载。

二、函数重载主要解决两个问题

  • 可变参数类型
  • 可变参数个数

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

1、可变参数类型

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

2、可变参数个数

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

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

延伸阅读

一、Python和其他语言的不同

Python 和其他语言的区别有很多,这里列举一些主要的区别:

Python 是一种解释型语言,而 C 和 C++ 是编译型语言。

Python 是一种动态类型语言,而 C 和 C++ 是静态类型语言。

Python 代码量相对较少,可读性较高,而 C 和 C++ 的代码量相对较多,可读性较低。

Python 的开发效率高,而 C 和 C++ 的开发效率相对较低。

Python 可以快速开发原型,而 C 和 C++ 需要更多的时间和精力来开发原型。

Python 有很多内置函数和库,可以快速完成很多任务,而 C 和 C++ 需要自己编写很多代码来完成同样的任务。

二、python中实现函数重载

函数重载指对一个同名的函数,可以传不同类型的参数,然后进行不同的操作。python默认不支持函数重载,因为下边的同名函数会覆盖上边的函数,但是我们可以借助functools中singledispatch实现python中的函数重载

示例:

from functools import singledispatch

class abs:

    def type(self,args):

        pass

class Person(abs):

    @singledispatch

    def type(self,args):

        super().type(“”,args)

        print(“我可以接受%s类型的参数%s”%(type(args),args))

    @type.register(str)

    def _(text):

        print(“str”,text)

    @type.register(tuple)

    def _(text):

        print(“tuple”, text)

    @type.register(list)

    @type.register(dict)

    def _(text):

        print(“list or dict”, text)

Person.type(“safly”)

Person.type((1,2,3))

Person.type([1,2,3])

Person.type({“a”:1})

Person.type(Person,True)

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部