为了准备考试,我正在实现一些基本的数据结构,遇到了以下问题。我想实现一个未排序的链表,并且已经实现了一个pop()
方法,但是我不知道,无论是在语法上还是在概念上,如何使一个函数有时接受参数,有时不接受参数。我希望这有道理。在
def pop(self):
current = self.head
found = False
endOfList = None
while current != None and not found:
if current.getNext() == None:
found = True
endOfList = current.getData()
self.remove(endOfList)
self.count = self.count - 1
else:
current = current.getNext()
return endOfList
我想知道如何使语句unsortedList.pop(3)
有效,3只是一个示例,unsortedList是类的新实例。在
使用具有默认值的参数的基本语法(和常见用例)如下所示:
然后你只需要根据争论来确定你希望你的行为如何改变。我只是猜测参数应该指定应该从列表中弹出的元素的索引。在
如果是这种情况,您可以直接使用有效的默认值,而不是
^{pr2}$None
,例如0
首先,向函数中添加一个具有默认值的参数:
现在,在代码
if item is None:
中,可以执行“no param”操作;否则,使用item
。你是想在逻辑的顶端切换,还是向下切换,这取决于你的逻辑。在本例中,item is None
可能意味着“匹配第一项”,因此您可能需要一个检查item is None or current.data == item:
的单个循环。在有时,您希望对一个可以合法地为
^{pr2}$None
的参数执行此操作,在这种情况下,您需要选择一个不同的sentinel。关于不同选择的利弊,这里有几个问题(其他地方也有博客文章)。但有一种方法:除非有人使用LinkedList的私有
_sentinel
类成员作为列表项是有效的,否则这是有效的。(如果这个是有效的,例如,因为您要用这些东西构建一个调试器,那么您必须变得更加棘手。)这方面的术语有点棘手。引用文件:
要理解这一点:“Parameters”(或“formal Parameters”)是函数定义要接受的东西;“arguments”是在调用表达式中传递给函数的东西;“parameter values”(或“actual Parameters”,但这只会让事情更混乱)是函数体接收的值。所以,在技术上说“默认参数”或“带默认参数的参数”都是不正确的,但两者都很常见,因为即使是专家也觉得这很令人困惑。(如果您很好奇,或者只是还不困惑,请参阅参考文档中的function definitions和{a2}以获取完整的详细信息。)
你的考试是专门用Python的吗?如果不支持,您可能需要研究一下function overloading.Python不支持此功能,但其他许多语言都支持,这是解决此类问题的一种非常常见的方法。在
在Python中,使用带有默认值的参数可以获得很多好处(正如michaelmauderer的示例所指出的)。在
相关问题 更多 >
编程相关推荐