【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