【发布时间】:2015-11-04 12:57:58
【问题描述】:
我正在学习 python oop 概念并偶然发现了我正在尝试编写的以下代码。有一个 Sort 类,它有不同的排序方法和一个通用函数 sort。
class Sort:
def __init__(self, numlist):
self.numlist = numlist
def msort(self, beg, end, reverse=False): #merge sort
if beg < end:
mid = (beg + end)//2
self.msort(beg, mid, reverse)
self.msort(mid+1, end, reverse)
self.__merge(beg, mid, end, reverse)
def isort(self, beg, end, reverse=False): #insertion sort
i = beg #initial index
for key in numlist[beg+1:end+1]: #from beg+1 to end
i = i+1 #current index in numlist
j = i-1
if reverse:
while j >= beg and self.numlist[j] < key:
self.numlist[j+1] = self.numlist[j]
j = j-1
self.numlist[j+1] = key
else:
while j >= beg and self.numlist[j] > key:
self.numlist[j+1] = self.numlist[j]
j = j-1
self.numlist[j+1] = key
def sort(self, beg, end, func=msort, reverse=False):
print('Calling {0}()'.format(func))
func(self, beg, end, reverse)
if __name__ == '__main__':
numlist = [3, 4, 2, 5, 9, 7, 1, 6]
s = Sort(numlist)
s.sort(0, len(numlist)-1, func=isort, reverse=False)
print(s.numlist, end='')
我有以下问题 - 1. 在 main 中,如果我只调用 s.sort(0, len(numlist)-1, reverse=False) 它会正确调用 msort 并给出结果,但如果我调用 s.sort(0, len(numlist)- 1, func=isort, reverse=False) 它给出以下错误 -
Traceback(最近一次调用最后一次):文件“Sort.py”,第 76 行,在 s.sort(0, len(numlist)-1, func=isort, reverse=False) NameError: name 'isort' is not defined
我明白为什么它不起作用,但不明白为什么 msort 能正常工作。
- 如果我调用 s.sort(0, len(numlist)-1, func=s.isort, reverse=False) 然后我得到以下错误 -
调用 main.Sort 对象 0x031BF830>>() Traceback(最近一次调用最后):文件“Sort.py”, 第 76 行,在 s.sort(0, len(numlist)-1, func=s.isort, reverse=False) 文件“Sort.py”,第 71 行,排序中 func(self, beg, end, reverse) TypeError: isort() 接受 3 到 4 个位置参数,但给出了 5 个
无法理解这里发生了什么。我好像调用了isort但是为什么参数不匹配
- 在函数 sort() 中,我无法调用 self.func() 再次给出属性错误。这是使用自我的坏习惯吗?在调用其他函数但调用 func() 时不使用 self.func()?
请解释组织这个类和函数调用的pythonic方式。
【问题讨论】:
-
确保复制你的代码,包括缩进——你的
def msort行应该缩进4个空格到Sort类,否则你会得到一个IndentationError你尝试运行这个 -
这是您的第一个问题;欢迎来到 Stackoverflow!
标签: python