这个C交换宏是否有等价的Python 3代码?

2024-04-20 10:27:03 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我在C中使用的代码。它看起来像是一个简单的变量交换

#define ELEM_SWAP(a,b) { register double t=(a);(a)=(b);(b)=t; }

但我看到过这样的称呼

ELEM_SWAP(array[x], array[y]). 

我试图在Python3中使用numpy数组模拟这个宏。与此最接近的等价物是这个函数,但它似乎是C代码交换变量,Python交换列表中的项

def elem_swap(mylist, x, y):
    mylist[x], mylist[y] = mylist[y], mylist[x]
    return mylist

Tags: 函数代码numpyregister列表def数组array
1条回答
网友
1楼 · 发布于 2024-04-20 10:27:03

C#define是一个文本处理指令。它只是取代了文本

所以,这个代码:

ELEM_SWAP(array[x], array[y]) 

替换为以下内容:

{ register double t=(array[x]);(array[x])=(array[y]);(array[y])=t; }

它将交换变量内容。如果您尝试类似ELEM_SWAP(1, 1)的操作,它将失败

无法用python代码将此宏的全部功能转换为python代码。但是如果我们需要一个类似的列表;那么你的功能就足够好了。除了我会删除return部分,除非您确实需要它(请记住,您返回的是相同的列表,而不是它的副本))

def elem_swap(mylist, x, y):
    mylist[x], mylist[y] = mylist[y], mylist[x]

这将像以下那样使用:

lst = [1.0, 2.3, 4.6, 3.9]
elem_swap(lst, 1, 2)

相关问题 更多 >