【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
'''


转载于:https://www.cnblogs.com/ww-xiaowei/p/11236607.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值