我认为输出应为x = 5
,y = 3
。但是,当我尝试在jes中执行它时,它会显示x=3
和y=5
。
我的交换功能如下:
def swap (x,y):
temp=x
x=y
y=temp
根据我的驱动程序功能,我致电swap()
:
def driver():
x=3
y=5
swap(x,y)
print x
print y
我想知道为什么输出不符合预期?
答案 0 :(得分:2)
嗯,这在python中不是一个大问题,你可以返回多个值,比如试试这个可能对你有用的代码片段。
def swap(a,b):
return (b,a)
def driver(x,y):
print "Previous x=",x,"y=",y
x,y = swap(x,y)
print "Now x=", x, "y=",y
driver(3,5)
答案 1 :(得分:1)
正如其他答案所暗示的那样,这确实不需要功能。既然您决定使用它们,那么您可以尝试更多地了解scopes。
为了保留您需要返回的交换值,或者在执行swap()
后迷失 :
def swap (x,y):
temp=x
x=y
y=temp
return x, y # must return the swapped values.
然后,在您调用swap()
的函数中,将返回的值分配给您交换的变量:
def driver():
x=3
y=5
x, y = swap(x,y) # re-assign values
print x
print y
现在运行driver()
将为您提供交换值:
5
3
这是因为在函数swap()
中,作为参数传递的变量x
和y
被视为该函数的本地变量,只有swap
才能看到它们的值。如果你没有返回这个值,它就会丢失并被遗忘。
答案 2 :(得分:-1)
整数在python中是不可变的。您在本地范围内将y
设置为x
并将x
设置为y
,但不会修改对传入的初始整数的引用。在python中,最好的如果你想要封装一个swap
函数来修改就地而不是通过返回传递某种容器对象是可变的并且包含对你要交换的东西的引用,那么可以做到:
def swap(container):
container[0], container[1] = container[1], container[0]
然后这样称呼它:
x = 3
y = 5
container = [x,y]
swap(container)
FWIW,python中的swap可以在一行中实现,简单如下:
x, y = y, x
无论如何,在大多数情况下,这在语法上可能更清晰。
答案 3 :(得分:-1)
在python赋值中更改对象的标识而不是其值(除非您正在改变内容)。值得注意的是,根据Python Data Model
每个对象都有一个标识,一个类型和一个值。
因此,在swap
内交换身份不会改变driver
内的身份。此外,python不允许您更改不可变类型的值,因此,没有其他可能的方法来交换swap
方法中的值。