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 
 

posted @ 2020-11-23 10:49  游丝飘榭  阅读(87)  评论(0编辑  收藏  举报