【python的練習題】:交換兩個變量值,不用中間變量(涉及字符串的切片)


 1 #交換兩個變量值,不用中間變量,至少兩種方案
 2 #常規 借助中間變量
 3 a='789'
 4 b='na'
 5 temp=a  6 a=b  7 b=temp  8 # print(a,b)
 9 
10 #姿勢一 列表生成式
11 a=123
12 b='name'
13 a,b=b,a 14 #a,b=a,b 跟'a=b b=a'有什么區別?
15 #詳細講解參照:https://www.jianshu.com/p/014599ab2c10
16 
17 #姿勢二 加減法
18 #如果是數字 可以這樣交換,如果字符串怎么搞?
19 a=10
20 b=20
21 a=a+b 22 b=a-b 23 a=a-b 24 print(a,b) 25 
26 #姿勢三 字符串切片
27 #如果是字符串 可以這樣交換,采用切片,ww_lst[0:3] #ww_lst[:3] 效果是一樣的,切片N:M,不包含M 當N為起始值可以省略
28 a='what'
29 b='your name'
30 a=a+b 31 a,b=a[len(a)-len(b):],a[:len(a)-len(b)] 32 print(a) 33 print(b)

=============================

那么,在x, y = y, x的背后都發生了些什么呢?

一般情況下Python語句是從左到右解析一個語句的,但在賦值操作的時候,因為是右值具有更高的計算優先級,所以需要從右向左解析。
對於x, y = y, x,它的執行順序如下:

  1. 先計算右值y , x(這里是簡單的原值,但可能會有表達式或者函數調用的計算過程), 在內存中創建元組(tuple),存儲y, x分別對應的值;
  2. 計算左邊的標識符,元組被分別分配給左值,通過解包(unpacking),元組中第一個標示符對應的值(y),分配給左邊第一個標示符(x),元組中第二個標示符對應的值(x),分配給左邊第二個標示符(y),完成了xy的值交換。
    需要注意的是當左右值和標識符的數量不等時會出現ValueError:
>>> x, y = 1, 2 >>> x, z = y, x, 3 ValueError: too many values to unpack >>> y, x , a= x, y ValueError: need more than 2 values to unpack 

而當左值只有一個變量的時候,默認將右值打包(pack)成一個元組(tuple)傳給右值。

>>> x = 1, 2 >>> x (1, 2)
鏈接:https://www.jianshu.com/p/014599ab2c10
來源:簡書
====================
''' 這里賦值之前,先計算右邊的值,所以賦值前a=1,b=2 ,計算完后a,b=(2,1+2) 所以a=2 b=3
>>> a,b=1,2
>>> t=(b,a+b)
>>> t[0]
2
>>> t[1]
3
>>> a,b=(b,a+b)
>>> a
2
>>> b
3
'''



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM