我正在尝试为我正在创建的类创建切片功能,以创建矢量表示.
到目前为止我有这个代码,我相信它会正确地实现切片,但每当我做一个调用,就像v[4]
v是一个向量python返回一个关于没有足够的参数的错误.所以我试图弄清楚如何getitem
在我的类中定义特殊方法来处理普通索引和切片.
def __getitem__(self, start, stop, step):
index = start
if stop == None:
end = start + 1
else:
end = stop
if step == None:
stride = 1
else:
stride = step
return self.__data[index:end:stride]
Run Code Online (Sandbox Code Playgroud) 为什么python中的切片对象不可清除:
>>> s = slice(0, 10)
>>> hash(s)
TypeError Traceback (most recent call last)
<ipython-input-10-bdf9773a0874> in <module>()
----> 1 hash(s)
TypeError: unhashable type
Run Code Online (Sandbox Code Playgroud)
他们似乎是不可改变的:
>>> s.start = 5
TypeError Traceback (most recent call last)
<ipython-input-11-6710992d7b6d> in <module>()
----> 1 s.start = 5
TypeError: readonly attribute
Run Code Online (Sandbox Code Playgroud)
上下文,我想创建一个将python int或slice对象映射到某些值的字典,如下所示:
class Foo:
def __init__(self):
self.cache = {}
def __getitem__(self, idx):
if idx in self.cache:
return self.cache[idx]
else:
r = random.random()
self.cache[idx] = r
return r
Run Code Online (Sandbox Code Playgroud)
作为一种解决方法,我需要特殊的案例切片:
class Foo:
def __init__(self):
self.cache = {} …
Run Code Online (Sandbox Code Playgroud) 我执行以下操作时出现"不可用"错误:
a = {}
a["wer":"table.%%maker%%"]
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
a["wer":"table.%%maker%%"]
TypeError: unhashable type
Run Code Online (Sandbox Code Playgroud)
"wer"键在这里应该有"table.%maker%"值,但是我不能插入百分号.我应该做什么?