gpt4 book ai didi

python - 有人可以举一个 "operator.index ()"的例子吗?

转载 作者:行者123 更新时间:2023-12-01 08:24:21 31 4
gpt4 key购买 nike

我理解该操作是将非整数的东西转换为整数。我理解正确吗?

我尝试实现函数“operator.index()”:

import operator
a = float (1.0)
print (a)
print (type (a))
print (type (operator.index (a)))

我预计:

1.0
<class 'float'>
<class 'integer'>

实际输出:

1.0
<class 'float'>
TypeError: 'float' object can not be interpreted as an integer

最佳答案

__index__ 只能用于无损将对象解释为整数索引值。来自 documentation for the hook :

Called to implement operator.index(), and whenever Python needs to losslessly convert the numeric object to an integer object (such as in slicing, or in the built-in bin(), hex() and oct() functions). Presence of this method indicates that the numeric object is an integer type. Must return an integer.

float不是整数类型,即使浮点值的子集是整数。

在标准库中,当前只有 intbool 类型实现该钩子(Hook)。该 Hook 适用于您自己的代码中的自定义类或在第 3 方库中定义的自定义类,以便在索引序列时可用。

它与 __int__ 不同,因为该钩子(Hook)确实允许有损转换; int(3.9) 为您提供 3,但您不会期望 listobject[3.9] 起作用(应该返回什么,索引处的元素3 还是 4?)。索引时不能使用 int() 将 float 强制转换为整数,或者只接受整个 float (这会不一致且令人困惑)。

如果您需要在自己的 Python 代码中支持任意类似 int 的类型,则只需使用 operator.index():

class SequenceObject:
# ...
def __getitem__(self, idx):
idx = operator.index(idx) # convert to a valid integer index value
# ...

__index__ 特殊方法已添加到 Python 中 PEP 357 ,因此您可以在切片和索引中使用 numpy 项目整数(这是不同的类型),因此这是可行的:

>>> import operator
>>> import numpy as np
>>> number1 = np.int8(1)
>>> type(number1)
<class 'numpy.int8'>
>>> type(operator.index(number1))
<class 'int'>
>>> l = [17, 42, 81]
>>> l[number1]
42

__index__允许您的类用于索引:

>>> class EnglishNumber:
... # lets pretend this is a number that automatically shows
... # as the English name, like the https://pypi.org/p/inflect would
... def __init__(self, name, value):
... self._value = value
... self._name = name
... def __repr__(self): return f"<EnglishNumber {self._name}>"
... def __str__(self): return self._name
... def __index__(self): return self._value
...
>>> number2 = EnglishNumber("two", 2)
>>> number2
<EnglishNumber two>
>>> operator.index(number2)
2
>>> l[number2]
81

关于python - 有人可以举一个 "operator.index ()"的例子吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54381866/

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