两个函数同名python

Two functions same name python

嗨,我在学习计算机科学,我有一个要求,我必须用Python编写两个同名函数。我该怎么做?

1
2
3
4
5
6
7
8
9
10
11
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()是队列的大小。谢谢您。


你做不到。至少不在同一个命名空间中(即:同一个模块或同一个类)。似乎你在尝试用一种语言学习一些东西,并试图将其应用到Python中。

您可以做的是让Add接受可变数量的参数,这样您就可以根据传入的内容执行不同的操作。

1
2
3
4
5
6
7
8
9
10
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以获取卡片列表,然后将它们全部添加:

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

然后,用一张卡叫它:

1
self.Add(listCards.GetCard(0))

…或者,卡片列表:

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

您似乎要做的是称为函数重载,而这并不是Python所支持的。有关python中函数重载的详细信息,请参见以下问题:python函数重载


根据您必须满足的事实,如果您可以使用一个函数,那么您可以在方法中使用同名函数,即:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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]

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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)

这会给你同样的输出。我不能遵循你方法的逻辑,但是无论你的方法实际做什么,它的想法都是一样的。


在Python2.7中,出于某种原因,您可以这样做:

1
2
3
4
5
def xyz():
    print"R"
def xyz():
    print"T"
xyz()

代码>如果要运行此函数,结果将为"t",因此将调用函数的第二个(或最后一个)版本。我是偶然发现的,花了很长时间才弄清楚我的程序为什么不起作用!我想你的计算机科学项目已经完成很久了,但我把它放在这里是为了提供一般信息,以防万一它能帮助其他人。?)