两个函数同名python

时间:2015-12-31 12:51:31

标签: python

您好我正在学习计算机科学,并且我有要求我必须在python中编写两个具有相同名称的函数。我该怎么办?

class QueueCards:
    def __init__(self):
        self.cards = []

    def Add(self, other):
        self.cards.insert(0, other)

    def Add(self, listCards, numCards):
        for i in numCards:
            card = listCards.GetCard(i)
            self.Add(card)

Count()是队列的大小。 谢谢。

3 个答案:

答案 0 :(得分:9)

你不能这样做。至少,不在同一名称空间(即:相同的模块,或相同的类)。看来你正试图用一种语言学习一些东西,并试图将它应用于python。

您可以做的是让Add获取可变数量的参数,因此您可以根据传入的内容执行不同的操作。

def Add(self, *args):
    if len(args) == 1:
        item = args[0]
        self.cards.insert(0, item)

    elif len(args) == 2):
        listCards, numCards = args
        for i in numCards:
            card = listCards.GetCard(i)
            self.cards.insert(0, card)

我个人认为最好有两个函数,因为它避免了歧义并有助于提高可读性。例如,AddCardAddMultipleCards

或者,甚至可能更好,一个用于任意数量卡片的功能。例如,您可以定义Add以获取卡片列表,然后将它们全部添加:

def Add(self, *args):
    for card in args:
        self.cards.insert(0, card)

然后,用一张卡打电话:

self.Add(listCards.GetCard(0))

......或者,卡片列表:

list_of_cards = [listCards.GetCard(i) for i in range(len(listCards))]
self.Add(*list_of_cards)

您似乎要做的事情称为函数重载,这根本不是Python支持的内容。有关python中函数重载的更多信息,请参阅此问题:Python function overloading

答案 1 :(得分:1)

基于要求的事实,如果你可以使用一个函数,你可以在方法中使用同名的函数,即:

def Add(cards, item):
    cards.insert(0, item)

class QueueCards:
    def __init__(self):
        self.cards = []
    def Add(self, listCards, numCards):
        for i in [1, 2, 3]:
            Add(self.cards, 4)



q = QueueCards()

q.Add(q.cards, 4)
print(q.cards)

[4, 4, 4]

或者您也可以通过实例传递实例并访问列表:

def Add(inst, item):
    inst.cards.insert(0, item)

class QueueCards:
    def __init__(self):
        self.cards = []

    def Add(self, listCards, numCards):
        for i in [1, 2, 3]:
           Add(self, numCards)


q = QueueCards()

q.Add(q.cards, 4)
print(q.cards)

哪个会给你相同的输出。我无法遵循你的方法的逻辑,但无论你的方法是什么,这个想法都是一样的。

答案 2 :(得分:0)

在python 2.7中,出于某些原因,您可以执行以下操作:-


def xyz():
    print "R"
def xyz():
    print "T"
xyz()
如果要运行此命令,结果将为“ T”,因此将调用该函数的第二个(或最后一个)版本。 我偶然发现了这个问题,花了我很长时间才找出为什么我的程序无法正常工作!我想您的计算机科学项目已经完成了很长时间,但是我将其放在此处仅供参考,以防万一它可以帮助其他人。 :¬)