Python min覆盖

时间:2015-10-16 06:13:20

标签: python python-3.x override minimum

在Python 3中,我为可以用作可迭代的特定数据结构创建了一个自定义类C.

但是,该类确保对于c的任何数据结构Cc[0]将是c中所有值的最小值。

有没有办法调用min(c)只返回c[0]而不会毫无用处地探索所有结构? (如果ValueError为空,则照例c

1 个答案:

答案 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函数指定默认索引以返回相关项。