Python中同名的两个函数
我需要用Python编写两个同名函数。我该怎么做Python中同名的两个函数,python,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
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
接受数量可变的参数,以便根据传入的内容执行不同的操作
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)
我个人认为最好有两个函数,因为它避免了歧义并有助于可读性。例如,AddCard
和addmultiplecard
或者,也许更好,一个单一的功能,您可以使用任何数量的卡。例如,您可以定义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中函数重载的更多信息,请参见此问题:基于这是您必须满足的一个事实,如果您可以使用函数,则可以在方法中使用同名函数,即:
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)
这将为您提供相同的输出。我无法遵循您的方法的逻辑,但无论您的方法实际做什么,想法都是一样的。在Python 2.7中,出于某种原因,您可以这样做:
def xyz():
print "R"
def xyz():
print "T"
xyz()
def xyz():
打印“R”
def xyz():
打印“T”
xyz()
如果要运行此函数,结果将是“T”,因此将调用函数的第二个(或最后一个)版本
我偶然发现了这一点,花了很长时间才发现为什么我的程序不起作用 真正的问题是,你为什么要这样做?我在学习计算机科学,我被要求这样做unfortunately@rotemhas,它们都必须是方法吗?numCards
未在函数中使用。您不能简单地执行def add_cards(cards):对于cards-in-cards:self.add(card)
?您确定要求“使用相同的名称编写两个函数”吗?或者,是“编写一个可以用两种不同方式调用的函数”的要求吗?我认为OP必须这样做,所以他们别无选择