Python 分钟覆盖
Python min override
在Python3中,我为一个特定的数据结构定制了一个class C,可以用作一个可迭代对象。
但是class确保对于C
的任何数据结构c
,c[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 相关项。
在Python3中,我为一个特定的数据结构定制了一个class C,可以用作一个可迭代对象。
但是class确保对于C
的任何数据结构c
,c[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 相关项。