您的代码存在几个问题。
首先,您实际上并没有使用函数的list 参数。相反,您使用的是全局列表serie。顺便说一句,你不应该使用 list 作为变量名,因为它会隐藏(覆盖)内置的 list 类型,这可能会导致神秘的错误。
正如 schwobaseggl 所提到的,默认函数参数是在定义函数时评估的,而不是在调用它时。因此,当您执行end = len(serie) 时,将end 设置为定义函数时serie 的当前长度。但是,您的脚本在定义 maxElement 之后定义了 serie,因此尚未定义该名称,这就是您收到此错误的原因:
NameError: name 'serie' is not defined
如果您将serie 的定义放在之前 maxElement 的定义将消除该错误,但由于我已经提到的错误,该功能仍然无法正常工作.
实际上,可能是另一个错误。 看起来您想要搜索介于 start 和 end 之间的最大元素,包括在内。如果是这样,您需要使用lst[start:end+1] 之类的东西。如果你想使用正常的 Python 约定,其中end 被排除在范围之外,那么你可以只使用lst[start:end]。请注意,切片的结束索引是否超出列表无关紧要;对于n > 0,lst[start:len(lst)+n] 与lst[start:len(lst)] 完全相同。
这是您的代码的修复版本。我稍微修改了数据以使其更易于测试。
def max_element(lst, start=0, end=None):
if end is None:
end = len(lst)
return max(lst[start:end + 1])
serie = [0, 3, 6, 1, 7, 5, 4, 8, 2]
print serie
print max_element(serie)
print max_element(serie, start=4)
print max_element(serie, end=2)
print max_element(serie, start=4, end=6)
print max_element(serie, start=3, end=3)
输出
[0, 3, 6, 1, 7, 5, 4, 8, 2]
8
8
6
7
1
然而,这个功能并不是必须的。你应该直接在你的列表上调用max,如果需要的话,切片,例如:
print max(serie[4:7])