python中的简单交换,概念混乱

2024-05-03 08:01:16 发布

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

所以我已经毕业了,拿到了我的compsci学位的所有学分。但我上学期的教授给我发了一封邮件,说他在我的一个作业中发现了一些有趣的东西。我忘了上下文,但我认为这无关紧要。我会发邮件交换的。在


发件人:PROF
收件人:我
主题:回复:LDA

嗨,学生,
我注意到你的一个作业答案有点奇怪:

def swap(i,j):
    tmp = i
    i = j
    j = tmp
    return i,j

这很管用,但有什么问题吗?


发件人:我
致:教授
主题:回复:LDA

哦,是的,我在用C语言思考,在python中不可以这样做:

^{pr2}$

然后Python将优化堆栈上的交换,根本不需要tmp变量。在


发件人:PROF
收件人:我
主题:回复:LDA

这是真的,但还有一个更微妙的概念混乱

所以我的问题是:我在这里遗漏了什么?在


Tags: 主题作业邮件tmp收件人学分学期lda
3条回答

他所期待的只是Python式的交换方式:

i, j = j, i

考虑一下在Python中如何调用swap,而在C中如何调用swap函数

例如,在C语言中

swap(&a, &b);

有效,并将a中的内存与{}中的内存交换(假设{}的实现是正确的)。在

但是,在Python中

^{pr2}$

…什么都不做!你必须分配结果:

a,b = swap(a,b)

但你为什么不直接做呢

a,b = b,a

完全抛弃swap()函数?在

如果您真正理解Python和C之间的区别,那么您将能够解释为什么Python swap函数不能在不分配结果的情况下交换两个变量。在

你的功能似乎太复杂了,你当然可以这么做

def交换(i,j): 返回j,i

只需一行代码就能实现同样的效果?在

相关问题 更多 >