3 回答
TA贡献1854条经验 获得超8个赞
你总是可以构建一个懒惰的资源,比如
class GiveAResource():
resource = [None]
def get_resource(self):
if self.resource[0] is None:
self.resource[0] = MyResource()
return self.resource[0]
这样的一个实例将在进程之间很好地序列化,因此您可以将它作为要在工作人员上执行的任何函数的输入,然后调用.get_resource()它会获得本地昂贵的资源(它将在稍后出现的任何工作人员上重新制作)。
此类最好在模块中而不是动态代码中定义。
这里没有锁定,因此如果多个线程在到目前为止还不需要资源的情况下同时请求资源,您将获得多余的工作。
TA贡献1893条经验 获得超10个赞
我猜你也numpy
用来操作数据(作为矩阵)?
如果依据numpy
, ans[i,:]
手段挑ith
的“行”ans
与所有的“列”的。注意,在处理 numpy 数组时,我们应该(几乎)总是使用[i, j]
而不是[i][j]
. 如果您之前使用 Python 或 Java 操作矩阵,这可能与直觉相反。
TA贡献1777条经验 获得超10个赞
我认为在这种情况下 [] 表示可以通过定义getitem方法使用的类对象的索引运算符
class A:
def __getitem__(self, key):
pass
key 可以是任何字面意思。在您的情况下,“[1,:]”键是一个包含“1”和一个切片(无,无,无)的元组。如果您的类表示要通过 [] 运算符访问的多维数据,则此类键可能很有用。其他人建议的答案可能是一个 numpy 数组:
以下是这种多维索引如何工作的快速示例:
class A:
values = [[1,2,3,4], [4,5,6,7]]
def __getitem__(self, key):
i, j = key
if isinstance(i, int):
i = slice(i, i + 1)
if isinstance(j, int):
j = slice(j, j + 1)
for row in self.values[i]:
print(row[j])
>>>a = A()
>>>a[:,2:4]
[3, 4]
[6, 7]
>>>a[1,1]
[5]
>>>a[:, 2]
[3]
[6]
添加回答
举报