Python代码规范和计算机中的位运算

1,代码规范

1.1名称

  • 文件夹:小写&小写下划线连接

  • 文件:小写&小写下划线连接

  • 变量

    • 全局变量,大写&大写下划线连接

    • 局部变量,小写&小写下换线连接

1.2注释

文件夹下的注释:创建__init__.py ,在里面写上此文件夹的作用的注释

1.3,todo注释

for i in range(10):
    pass
#TODO v1版本未实现,后续在v1.n版本中更新

该功能主要是注释版本信息和项目开发进度

1.4 条件嵌套

写条件语句一定要想办法减少嵌套的层级(最好不超过3层)

1.5,简单逻辑先处理

1.6,循环

尽量少循环,提高代码效率

1.7 ,变量和值

变量和值等号前后要注意空格

2,补充

2.1pass作用

如果在条件中没有代码,可以用pass来使得代码更加完整

2.2,is== 的区别

  • ==用于比较两个值是否相等

  • is用于表示内存地址是否一致

2.3 位运算

位运算就是对二进制的操作

  • &,与(都为1)

    a = 60            # 60 = 0011 1100  不够8位会在前面补0
    b = 13            # 13 = 0000 1101  
    #a,b进行计算时,如果a,b二进制数相同位置都为1,则结果为1,否则为0
    c = a & b         # 12 = 0000 1100
  • |,或(只要有一个为1)

    a = 60            # 60 = 0011 1100 
    b = 13            # 13 = 0000 1101 
    #a,b进行计算时,如果a,b二进制数相同位置只要有一个为1,则结果为1,否则为0
    c = a | b         # 61 = 0011 1101 
  • ^,异或(值不同)

    a = 60            # 60 = 0011 1100 
    b = 13            # 13 = 0000 1101 
    #a,b进行计算时,如果a,b二进制数相同位置的值不同,则结果为1,否则为0
    c = a ^ b         # 49 = 0011 0001 
  • ~,取反

    a = 60            #  60 = 0011 1100 
    表示对二进制数相同位置的值取反
    c = ~a;           # -61 = 1100 0011
  • <<,左移动

    a = 60            #  60 = 0011 1100
    #表示让a的二进制数往左移动两位,不够8位用0补足
    c = a << 2;       # 240 = 1111 0000
  • >>,右移动

    a = 60            # 60 = 0011 1101 
    #表示让a的二进制数往右移动两位,不够8位用0补足
    c = a >> 2;       # 15 = 0000 1111

开发中,二进制的位运算几乎很少使用,在计算机底层 或 网络协议底层用的会比较多,例如:

  • 计算 2**n

    2**0    1 << 0   1     1    #2的0次方在计算机中表示1往左移0位,结果得到1,转换为十进制结果为1
    2**1    1 << 1   10    2    #2的1次方在计算机中表示1往左移1位,结果得到10,转换为十进制结果为2
    2**2    1 << 2   100   4    #2的2次方在计算机中表示1往左移2位,结果得到100,转换为十进制结果为4
    2**3    1 << 3   1000  8    #2的3次方在计算机中表示1往左移3位,结果得到1000,转换为十进制结果为8
    ...
  • 计算一个数的一半【面试题】

    v1 = 10 >> 1    #给一个数,计算这个数的一半,在计算机中表示左移一位,得到这个数的一半
    print(v1) # 值为5
  • 网络传输数据,文件太大还未传完(websocket源码为例)。

         第1个字节         第2个字节         ... 
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-------+-+-------------+-------------------------------+
    |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
    |I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
    |N|V|V|V|       |S|             |   (if payload len==126/127)   |
    | |1|2|3|       |K|             |                               |
    +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
    ​
    FIN位置是0,表示这是一部分数据,后续还有数据。
    FIN位置是1,表示这是最后数据,已发送完毕。
    # 例如:接收到的第一个字节的值为245(11110101),让v的二进制和 1000 0000 做 & 与运算。
    ​
    v = 245   # 245 11110101
              # 128 10000000
                    10000000 #FIN位置为1,表示这是最后数据,已经发送完毕
        
    data = v & 128  
    if data == 0:
        print("还有数据")
    else:
        print("已完毕")

上一篇:天玑1100相当于骁龙多少处理器


下一篇:树状数组讲解(简洁好懂)