Multiple assignment and evaluation order in Python

前端 未结 10 1908
醉酒成梦
醉酒成梦 2020-11-22 01:41

What is the difference between the following Python expressions:

# First:

x,y = y,x+y

# Second:

x = y
y = x+y

First gives diffe

10条回答
  •  一向
    一向 (楼主)
    2020-11-22 02:03

    I've recently started using Python and this "feature" baffled me. Although there are many answers given, I'll post my understanding anyway.

    If I want to swap the values of two variables, in JavaScipt, I'd do the following:

    var a = 0;
    var b = 1;
    
    var temp = a;
    a = b;
    b = temp;
    

    I'd need a third variable to temporarily hold one of the values. A very straightforward swap wouldn't work, because both of the variables would end up with the same value.

    var a = 0;
    var b = 1;
    
    a = b; // b = 1 => a = 1
    b = a; // a = 1 => b = 1
    

    Imagine having two different (red and blue) buckets and having two different liquids (water and oil) in them, respectively. Now, try to swap the buckets/liquids (water in blue, and oil in red bucket). You can't do it unless you have an extra bucket.

    Python deals with this with a "cleaner" way/solution: Tuple Assignment.

    a = 0
    b = 1
    
    print(a, b) # 0 1
    
    # temp = a
    # a = b
    # b = temp
    
    a, b = b, a # values are swapped
    
    print(a, b) # 1 0
    

    I guess, this way Python is creating the "temp" variables automatically and we don't have to worry about them.

提交回复
热议问题