zoukankan      html  css  js  c++  java
  • 【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
    '''


    -----------------------------------------Have a good day!---------------------------------------------------------------------------------------------------
  • 相关阅读:
    数据库事务的4种隔离级别
    线程竞争与同步
    flex 1与flex auto
    React环境搭建
    vue与mapbox
    前端-URL到页面显示的全过程
    监听滚动事件
    点击上下箭头,页码发生改变
    鼠标滑过元素,div显示,并根据scrollTop向下移动
    KB/MB/GB。。单位换算
  • 原文地址:https://www.cnblogs.com/ww-xiaowei/p/11236607.html
Copyright © 2011-2022 走看看