在Python 3中,我为可以用作可迭代的特定数据结构创建了一个自定义类C.
但是,该类确保对于c
的任何数据结构C
,c[0]
将是c
中所有值的最小值。
有没有办法调用min(c)
只返回c[0]
而不会毫无用处地探索所有结构? (如果ValueError
为空,则照例c
答案 0 :(得分:1)
有没有办法调用min(c)只返回c [0]?
是的,有两种方式:
第一个是修改python的源代码并改变内置的函数结构,这根本不是明智和理性的。
第二种方法是在相对名称空间中创建自己的min函数。
实际上是基于调用LEGB manner的python名称解析方案,当你在作用域内使用非限定名时,Python会搜索最多四个作用域,本地(L)作用域,然后是任何本地作用域。封闭(E)范围(如果存在),然后是全局(G)范围,然后是内置(B)范围。因此,由于此规则,内置范围将是最后搜索,您只需创建一个这个范围的顶级新人。
但请注意,在这种情况下,您无法使用前面的min
函数,如果碰巧使用它,您可以使用del
语句删除服装函数。
但另一种pythonic方法是在你的类中创建一个min
函数并将其用作属性:
>>> class C(object):
... def __init__(self):
... self.index = 0
... self.iterable = range(10)
... def __iter__(self):
... return self
... def min(self):
... try:
... return self.iterable[self.index]
... except IndxError:
... raise Exception('The index is out of range')
>>> c=C()
>>>
>>> c.min()
0
>>> c.iterable=[5,1,4,8]
>>> c.min()
5
请注意,在这种情况下,您可以为min
函数指定默认索引以返回相关项。