gpt4 book ai didi

Python 最小覆盖

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:17 27 4
gpt4 key购买 nike

在 Python 3 中,我为可用作可迭代对象的特定数据结构创建了自定义类 C。

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

有没有一种方法可以让对 min(c) 的调用只返回 c[0] 而无需无用地探索所有结构? (或者像往常一样,如果 c 为空,则返回 ValueError)

最佳答案

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

是的,有两种方式:

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

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

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

但是请注意,在那种情况下你不能使用前面的min 函数,如果它碰巧使用它你可以使用del 语句删除costume 函数。

但是完成此任务的另一种 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 函数指定默认索引以返回相关项。

关于Python 最小覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33163639/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com