当前位置: 首页 > 面试题库 >

Python中的函数重载:缺少

翟冯浩
2023-03-14
问题内容

就像这样说:

http://web.archive.org/web/20090624083829/http://mail.python.org/pipermail/python-
list/2003-May/206149.html

Python中不存在函数重载。

就我而言,这也是一种面向对象的语言,因此对我来说是一个很大的障碍。最初,我发现无法区分参数类型很困难,但是Python的动态特性使其变得容易(例如,列表,元组,字符串非常相似)。

但是,计算传递的参数数量然后完成工作就像一个过大的杀伤力。


问题答案:

如要注意的那样,具有默认值的关键字参数可以有很长的路要走。

我还要指出,在我看来,担心很多类型传递给方法的做法违背了Python的精神。在Python中,我认为使用鸭子类型更被接受-
询问对象可以做什么,而不是对象可以做什么。

因此,如果您的方法可以接受字符串或元组,则可以执行以下操作:

def print_names(names):
    """Takes a space-delimited string or an iterable"""
    try:
        for name in names.split(): # string case
            print name
    except AttributeError:
        for name in names:
            print name

然后,您可以执行以下任一操作:

print_names("Ryan Billy")
print_names(("Ryan", "Billy"))

尽管类似的API有时表明存在设计问题。



 类似资料:
  • 问题内容: 我知道Python不支持方法重载,但是我遇到了一个似乎无法用一种很好的Pythonic方法解决的问题。 我正在制作一个角色需要射击各种子弹的游戏,但是如何编写用于创建这些子弹的不同功能?例如,假设我有一个函数,该函数创建一个以给定速度从A点移动到B点的子弹。我会写一个像这样的函数: 但是我想编写其他创建项目符号的功能,例如: 以此类推。有没有一种更好的方法可以在不使用太多关键字参数的情

  • 问题内容: 覆盖和过载之间有什么区别? 问题答案: 重载:在编译时根据指定参数的数量和类型选择方法 签名 覆盖:在执行时根据目标对象的实际类型(与表达式的编译时类型相对)选择方法 实现 例如: 这两个调用都是 重载的 示例。有两种方法,称为,编译器确定要调用的签名。 第一次调用是 覆盖 的示例。编译器选择签名“ foo(int)”,但是在执行时,目标对象的类型确定要使用的实现应为in中的一个。

  • 问题内容: 在PHP中,函数重载和函数覆盖是什么意思。两者之间有什么区别?无法弄清楚它们之间有什么区别。 问题答案: 重载 定义的函数具有相似的签名,但具有不同的参数。 覆盖 仅与派生类相关,派生类中的父类已定义了一个方法,而派生类希望 覆盖 该方法。 在PHP中,您只能使用magic方法重载方法。 覆盖 的示例:

  • 问题内容: 经典(非js)重载方法: Javascript不允许使用同一个名称定义多个功能。这样,这样的事情就会出现: 除了传递带有重载的对象之外,JavaScript中是否有更好的解决方法来实现函数重载? 传递重载会很快导致函数变得过于冗长,因为每个可能的重载都需要一个条件语句。使用函数来完成那些条件语句的内部会导致带有范围的棘手情况。 问题答案: Javascript中的参数重载有多个方面:

  • 本文向大家介绍PowerShell中的函数重载示例,包括了PowerShell中的函数重载示例的使用技巧和注意事项,需要的朋友参考一下 在PowerShell中,我们可以使用Function关键字来定义一个函数,比如: 这个名为Get-Data的函数接收一个int类型的参数$data,直接将其返回。那么,我同时还需要一个接收string类型的Get-Data函数怎么办?方法比较奇怪,至少和传统的C

  • null 我不太确定如何处理我的代码,以下是我得到的: 我只是不知道我应该打什么。我相信我已经完成了第一个重载构造函数,但我对此还是新手。 那么,我应该做些什么来使重载构造函数工作呢? 我对Java和面向对象编程非常陌生。