我是一个Python n00b,冒着问一个基本问题的风险,我走了。
我正在将一些代码从C移植到Python,原因是我不想进入。
在C代码中,我有一些代码可以在下面重现。
float table[3][101][4];
int kx[6] = {0,1,0,2,1,0};
int kz[6] = {0,0,1,0,1,2};
我想要下面的C代码的等效Python表达式:
float *px, *pz;
int lx = LX; /* constant defined somewhere else */
int lz = LZ; /* constant defined somewhere else */
px = &(table[kx[i]][0][0])+lx;
pz = &(table[kz[i]][0][0])+lz;
有人可以通过向我提供Python中的等效表达来帮助我吗?
答案 0 :(得分:3)
这就是......你不能在python中做指针,所以你在这里展示的内容并不是“便携式的”:
float *px, *pz; <-- this doesn't exist
int lx = LX; /* constant defined somewhere else */
int lz = LZ; /* constant defined somewhere else */
px = &(table[kx[i]][0][0])+lx;
pz = &(table[kz[i]][0][0])+lz;
^ ^ ^
| | |
+----+----------------------+---- Therefore none of this makes any sense...
你要做的是在多维数组table
中有一个指向某个偏移量的指针,因为你不能在python中这样做,你不想逐字地“移植”这段代码。
遵循这个以外的逻辑,您使用px
和pz
做什么?这是尝试和移植时需要了解的代码。
答案 1 :(得分:0)
你的C代码没有直接的等价物,因为Python没有指针或指针算术。相反,重构代码以使用括号表示法索引到表中。
table[kx[i]][0][lx] = 3
将大致相当于C
px = &(table[kx[i]][0][0])+lx;
*px = 3;
请注意,在Python中,您的表不会是连续的。特别是,虽然这可能适用于C:
px[10] = 3; // Bounds violation!
这将是Python中的IndexError:
table[kx[i]][0][lx + 10] = 3