zoukankan      html  css  js  c++  java
  • python学习第二天 --- 变量与运算符

     

    1.变量

    >>> A = [1,2,3,4,5,6] 
    >>> print(A)
    [1, 2, 3, 4, 5, 6]
    >>> B= [1,2,3]
    >>> A * 3 + B + A
    [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6]
    其中,=表示赋值符号
    命名规则:(标识符)
    • 名字需要有见名知义的效果
    • 标识符可以由字母,下划线和数字组成
    • 不能以数字开头
    • 不能与关键字重名
    python建议命名是通过下划线分割单词,而不是其他语言中建议的驼峰命名法。
    常量用纯大写表示(不成文的规定)
    值类型:int str tuple
    引用类型: list set dict
     
    id: 显示某一个变量在内存中的地址
    >>> b = 'hello' 
    >>> id(b) 
    3154052420656 
    >>> b = b + ' python' 
    >>> b 
    'hello python' 
    >>> id(b) 
    3154052420528

    不可变验证:

    >>> 'python'[0] 

    'p'
    >>> 'python'[0] = '0'
    Traceback (most recent call last):
      File "<pyshell#14>", line 1, in
      <module> 'python'[0] = '0'
      TypeError: 'str' object does not support item assignment
    列表的可变与元组的不可变:
     
    >>> id(a) 
    2186010798592 
    >>> hex(id(a)) 
    '0x1fcf865aa00' 
    >>> a[0] = '1' 
    >>> id(a) 
    2186010798592 
    //元组 
    >>> a = (1,2,3) 
    >>> id(a) 
    2186018466560 
    >>> a[0] = '5'
     Traceback (most recent call last): 
        File "<pyshell#7>", line 1, in <module> 
        a[0] = '5'
         TypeError: 'tuple' object does not support item assignment 
    >>> a[0] 1 //数组添加元素: >>> b= [1,2,3] >>> b.append(4); >>> print(b) [1,2,3,4] //元组不可以修改元素,但是元组中的元素如果涉及到引用类型,可以修改引用类型中的元素,这个可能是地址不变就行 >>> a = (1,22,3,6,8) >>> a[0]
    1 >>> a[0] = 3 Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> a[0] = 3 TypeError: 'tuple' object does not support item assignment
    >>> a = (1,2, [1,2,3]) >>> a[2][1] = 4 >>> a
    (1, 2, [1, 4, 3])

    2.运算符

      算数运算符:

        加减乘: + -*
        整除: //
        求余: %
        多次方: 如二次方: 2**2, 三次方: 2**3,四次方: 2**4
        注意: 没有自增运算符++和自减运算符++
     

      比较运算符:

        除了数字以外其他也可以进行比较:
        1.序列比较规则: 对应位依次比较
     

      逻辑运算符:

        and or not

        布尔值转换:0, 空字符串,{},(),[], set()都会被转换为False
     
     

      成员运算符:in、 not in

      
    >>> a = 1 
    >>> a in [1,2,3,4,5] 
    True 
    >>> b = [1] 
    >>> b in [ 1,2,3,4,5] 
    False 
    >>> b in [[1],2,3,4,5] 
    True
      可以判断是否在序列,集合

      字典成员运算符

    >>> b = 'a' 
    >>> b in {'c' : 1} 
    False 
    >>> b = 1 
    >>> b in {'c': 1} 
    False 
    >>> b = 'c' 
    >>> b in {'c': 1} 
    True
      由上边可以看出,该成员指的是字典的键,判断该键是否在字典的键组中
     

      身份运算符:

      只有当取值相等的时候,才会返回结果为true
    >>> 1 is 1
    True 
    >>> 'c' is 'c'
    True 
    >>> [1,2,3] is [1,2,3] 
    False 
    >>> a = 1 
    >>> b = 1.0 
    >>> a == b 
    True 
    >>> a is b 
    False
      关系运算符比较两个值是否相等,身份运算符则比较两个变量或常亮身份是否相等
    >>> a = {1,2,3} 
    >>> b = {2,1,3} 
    >>> a == b 
    True 
    >>> a is b 
    False
      集合是无序的,因此值相等,但是,is比较储存地址,因此,不相等
    >>> id(a) 
    2214796242272 
    >>> id(b) 
    2214796241376
      元组是有序的,而且,地址不同,
    >>> c = (1,2,3) 
    >>> d = (2,1,3) 
    >>> c == d 
    False 
    >>> c is d 
    False

      判断类型

    a = 'hello' 
    type(a) == int 
    //False
     type(a) == str 
    //True 
    isinstance(a, str) 
    //True
      isinstance的第二种用法:
      
    isinstance(a,(int, str, float))
    //true --- 判断a是否是后边三种类型中任意一类的一种

    对象的三个特征: id、value、type

    位运算符:

    >>> a = 2 
    >>> b = 3
    >>> a & b 
    //2 
    >>> a | b 
    //3

    知识补充:

     
           源码,反码,补码;
                    正整数的原码,反码和补码计算。符号位为0,原码=反码=补码。
                    负整数:源码除符号位按位取反,得反码,反码+1得补码
     
          1.按位与:
     
              负数与负数的按位与,要先转换成补码,在进行按位与运算,然后在转成补码
               例子:-9 & -7 = -15,过程如下图
     
     
              负数与正数的按位与,负数要转换成补码,正数的补码和原码一样,所以不变,正数与负数的补码进行按位与运算,结果也需转换成原码。
              例子:-9 & 10 = 2,过程如下图:
     
           2.按位或
     
                  负数按位或,先将要操作的负数转换成补码,在按位或,得到的结果再转换成原码,就是最终结果。
        
     
          3、按位异或(^)
     
                 负数的按位异或,先将操作的负数转成补码,在进行异或操作。得出结果,如果最高位是 1,还要转成原码。如果最高位是 0,则不需要转了。
     
          4、按位取反(~)
     
                 先将要取反的负数转成补码,在按位取反。
     
          5、按位左移(<<)
     
                先将要按位左移的负数转成补码,在将补码平移指定的位数,然后在将结果转换成原码。
                转换的时候有两种情况,第一种是左移的部分要舍弃的,第二种是不需要舍弃的。
                第一种:-5 << 3 = 1000 0101 << 3 = -40,这个数左位移 3 位,1000 0101 第一位是符号位不算,从第二位开始数 3 位是 0,这种情况左移 3 位,左移的部分就舍弃,如果是 1,就不舍弃左移的部分。右边空缺的部位补 0。如下图
     
     
                第二种:-121 << 2 = 1111 1001 << 2 = -484,这个数左移 2 位,除了第一个符号位,从左边数第 2 位是 1,这种情况左移 2 位,左移的部分不能舍弃,需要在左边补 1,补齐位数。右边空缺的部位补 0。如下图
     
     
          6、按位右移(>>)
     
               将要右移的负数先转换成补码,在将补码向右平移指定的位数,向右平移的部分舍弃,左边补 1 补齐。再将结果转成原码,就是最终结果。例子:-57 >> 2 = 1011 1001 >> 2 = -15。运算过程如下图
     
        特别说明:图片来源于简书,具体位置已忘记,如有侵权或需要标注出处,请联系我:1261167816@qq.com 
     

  • 相关阅读:
    .NET视频学习总结
    hdu5288(2015多校1)OO’s Sequence
    【Go web开发之revel+mgo】第1章 述与环境
    Android获得当前系统时间、星期几、周几
    夯实Java:从面向对象说起
    centos7 安装nginx
    centos7 安装nginx
    centos7 安装nginx
    element-ui中cascader同时获取label和value值
    element-ui中cascader同时获取label和value值
  • 原文地址:https://www.cnblogs.com/dsweb/p/14023238.html
Copyright © 2011-2022 走看看