Python 分钟覆盖

Python min override

在Python3中,我为一个特定的数据结构定制了一个class C,可以用作一个可迭代对象。

但是class确保对于C的任何数据结构cc[0]将是c中所有值的最小值。

有没有一种方法可以简单地调用 min(c) returns c[0] 而无需无用地探索所有结构? (或者像往常一样 ValueError 如果 c 为空)

Is there a way that a call to min(c) simply returns c[0]?

是的,有两种方法:

第一个是修改python的源代码,改变内置的函数结构,这是不明智和不合理的。

第二种方法是在相对命名空间中创建您自己的 min 函数。

实际上基于称为 LEGB manner 的 python 名称解析方案,当您在范围内使用非限定名称时,Python 最多搜索四个范围,本地 ( L) 作用域,然后是任何封闭 (E) 作用域的局部作用域(如果存在),然后是全局 (G) 作用域,然后是内置 (B) scope.Thus 由于此规则,内置范围将在末尾进行搜索,您只需在此范围的顶层创建一个新范围即可。

但是请注意,在那种情况下你不能使用前面的min功能,如果它恰好使用它你可以使用del语句删除服装功能。

但是完成此任务的另一种 pythonic 方法是在 class 中创建一个 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 函数指定默认索引 returns 相关项。