为什么这段Python代码无法实现两个数值的交换功能?
问题原因
- Python的参数传递是传对象引用,你代码里用到的整数属于不可变类型,函数内部对参数的重新赋值只会修改函数内部的局部变量,完全不会影响外部的原变量。
- 你写的
swap函数里的形参x、y是函数内部的局部变量,和外面全局定义的x、y只是同名,本质是两个完全独立的变量,你在函数里交换的只是局部变量的指向,全局变量根本没被改动,所以打印出来还是原来的值。
正确实现方案
你可以选下面任意一种方式修改:
方案1:函数返回交换后的值,外部接收
def swap(x, y): '''交换两个数值的函数''' print("INSIDE") return y, x # 驱动代码 x = 2 y = 3 x, y = swap(x, y) print(x) print(y)
方案2:通过可变对象传递(比如列表)
如果要在函数内部修改外部的值,可以把数值放到列表这类可变对象里传入,修改可变对象内部的元素会生效:
def swap(arr): '''交换列表前两个元素的函数''' print("INSIDE") arr[0], arr[1] = arr[1], arr[0] # 驱动代码 x = 2 y = 3 container = [x, y] swap(container) x, y = container print(x) print(y)
方案3:原生直接交换(不需要额外封装函数)
Python支持直接交换两个变量的值,不需要临时变量也不需要写函数,一行就可以搞定:
x = 2 y = 3 x, y = y, x print(x) print(y)
内容的提问来源于stack exchange,提问作者Darshan Asknani
相关产品推荐
相关产品推荐

