【发布时间】:2014-08-11 18:05:25
【问题描述】:
我目前正在尝试为 python 中的内置 min-max 函数编写等效代码,我的代码返回了一个我完全不理解的非常奇怪的异常:
TypeError: 'generator' object is not subscriptable, min, 7, , 9
当我尝试使用时:
min(abs(i) for i in range(-10, 10))
这是我的代码:
def min(*args, **kwargs):
key = kwargs.get("key", None)
argv=0
for i in args:
argv+=1
if argv == 1 and (type(args) is list or type(args) is tuple or type(args) is str):
min=args[0][0]
for i in args[0]:
if key != None:
if key(i) < key(min):
min = i
else:
if i < min:
min = i
return min
else:
min=args[0]
for i in args:
if key != None:
if key(i) < key(min):
min = i
else:
if i < min:
min = i
return min
根据文档,我应该能够迭代生成器...
【问题讨论】:
-
您可以迭代生成器。你不能这样做
generator[0](“不可下标”)。它抱怨min=args[0][0]。 -
但是如果我不能在它的值中选择它,我该如何将默认值设置为 min 呢?
-
首先将其设置为
None,然后在迭代生成器时检查它是否为None(因此您可以将其设置为第一个元素),然后(如果没有元素)。 -
请注意,
args将始终是一个元组,因此您的if块将始终被输入,而您的else块将永远不会被输入.此外,由于if和else在它们内部都有一个无条件的return,所以你的第一个for循环永远不会超过第一次迭代。您也可以删除它,并检查argv。 -
好的,谢谢,我不知道,我会尝试 hlt 解决方案并更改我的代码,