元编程 - 更改 SIMD 计算的表示

Metaprogramming - change representation of SIMD calculation

在做 parallel/SIMD 工作时,我经常用下面的语法在函数 f 中表示计算。不过写起来有点容易出错,我想按照g中定义的语法来写。有什么方法可以从 f 中的语法变成 g?

dta=[[0,0,0,0],[0,0,0,0]]

VAR_ONE, VAR_TWO = range(2)

def f(ln): 
    dta[VAR_ONE][ln] = dta[VAR_ONE][ln] + 1

def g():
    VAR_ONE = VAR_ONE + 1


for ln in range(4):
    f(ln) 

我不确定你在找什么,但我猜是这样的。您可以创建一个 class,它的属性可以满足您的需求(我认为)。

我的意思是:

class Class:
    _VAR_ONE, _VAR_TWO = range(2)

    def __init__(self, dta, ln):
        self.dta = dta
        self.ln = ln

    def _getter(self):
        return self.dta[self._VAR_ONE][self.ln]

    def _setter(self, value):
        self.dta[self._VAR_ONE][self.ln] = value

    VAR_ONE = property(_getter, _setter)

    def g(self):
        self.VAR_ONE = self.VAR_ONE + 1


dta = [[0,0,0,0], [0,0,0,0]]

for ln in range(4):
    inst = Class(dta, ln)
    inst.g()

print(dta)  # -> [[1, 1, 1, 1], [0, 0, 0, 0]]