与ctypes的工作和更换数组值

问题描述 投票:0回答:1

我正在修改使用这里找到ctypes的一个python包装:https://github.com/Grix/helios_dac/blob/master/sdk/examples/python/linux_example.py

我使用的可变性的逻辑和由通常的Python代码和代码不再起作用引用传递如果我改变线33和39:

for j, f in enumerate(frames[i]):
    if (j < 500):
        x = round(j * 0xFFF / 500)
    else:
        x = round(0xFFF - ((j - 500) * 0xFFF / 500))

    f = HeliosPoint(int(x),int(y),255,255,255,255)

有人能解释为什么吗?是F不等同于帧[i] [j]?

python ctypes
1个回答
0
投票

[Python 3]: The for statement

for循环,使分配到目标列表中的变量(一个或多个)。这将覆盖所有以前分配到这些变量包括在套件中的for循环的制作:

for i in range(10):
    print(i)
    i = 5             # this will not affect the for-loop
                      # because i will be overwritten with the next
                      # index in the range

我将介绍一个简单的例子,然后再延伸到你的。

>>> l = [1, 2, 3]
>>> for i in l:
...     i += 5
...     print(i)
...
6
7
8
>>> print(l)
[1, 2, 3]

相同的代码,但没有循环将是:

>>> i = l[0]
>>> i += 5
>>> print(i)
6
>>> i = l[1]
>>> i += 5
>>> print(i)
7
>>> i = l[2]
>>> i += 5
>>> print(i)
8
>>> print(l)
[1, 2, 3]

正如所看到的,分配另一个值的循环变量,不改变原有的价值。这可把更简单:

>>> some_variable = 1
>>> some_variable
1
>>> some_other_variable = some_variable
>>> some_other_variable  # Here it will have value 1
1
>>> some_other_variable = 2  #  The value will change, but it won't affect `some_variable`
>>> some_other_variable
2
>>> some_variable  # Its value is unchanged
1

要在迭代,一个办法就是使用枚举(如你已经在你的代码中使用)更改列表中的值:

>>> l
[1, 2, 3]
>>> for idx, elem in enumerate(l):
...     l[idx] = elem + 5
...
>>> print(l)
[6, 7, 8]

运用同样的原则问题的方法:在你的代码段的最后一行:

f = HeliosPoint(int(x),int(y),255,255,255,255)

应该变成:

frames[i][j] = HeliosPoint(int(x), int(y), 255, 255, 255, 255)
© www.soinside.com 2019 - 2024. All rights reserved.