# 数据类型

# int

# int 进制转换

  • 创建指定进制的数字常量:

    >>> 10          # int 型常量默认为十进制
    10
    >>> 0b1000      # 声明二进制的 int 型常量
    8               # 会自动转换成十进制再存储
    >>> 0b2         # 数字 2 超出二进制的范围
    SyntaxError: invalid digit '2' in binary literal
    >>> 0o10        # 声明八进制的 int 型常量
    8
    >>> 0xFF        # 声明十六进制的 int 型常量
    255
    
  • 从其它进制转换成十进制:

    >>> int('10')               # 从 str 类型,转换成 int 类型
    10
    >>> int('10', base=8)       # 从 base 进制(str 类型),转换成十进制(int 类型)。base 默认为 10 进制
    8
    >>> int('FF', base=16)
    255
    >>> int('0xFF', base=16)    # 可以使用 0x 等进制前缀,没有影响
    255
    
  • 从十进制转换成其它进制:

    >>> bin(255)                # 从十进制(int 类型)转换成二进制(str 类型)
    '0b11111111'
    
    >>> oct(8)                  # 从十进制(int 类型)转换成八进制(str 类型)
    '0o10'
    
    >>> hex(16)                 # 从十进制(int 类型)转换成十六进制(str 类型)
    '0x10'
    >>> '{:02x}'.format(16)     # 也可以用 str.format() 方法转换,这样没有 0x 前缀
    '10'
    

# int 与 str 转换

  • def chr(code: int) -> str
        # 输入一个 Unicode 码(int 类型),返回其对应的字符(str 类型)
    

    例:

    >>> chr(65)
    'A'
    >>> chr(128)
    '\x80'
    >>> chr(0x112233)           # 输入的取值范围为 [0, 0x110000)
    ValueError: chr() arg not in range(0x110000)
    
  • def ord(c: Union[Text, bytes]) -> int
        # 输入一个字符(str 或 bytes 类型),返回其对应的 Unicode 码(int 类型)
    

    例:

    >>> ord('A')
    65
    >>> ord('AA')
    TypeError: ord() expected a character, but string of length 2 found
    >>> ord('你')
    20320
    

# int 与 bytes 转换

  • 从 bytes 对象转换成十六进制字符串,可以调用 bytes.hex() 方法:

    >>> '你'.encode()
    b'\xe4\xbd\xa0'
    >>> '你'.encode().hex()
    'e4bda0'
    

    也可以手动转换:

    >>> [i for i in '你'.encode()]
    [228, 189, 160]
    >>> [hex(i) for i in '你'.encode()]
    ['0xe4', '0xbd', '0xa0']
    >>> ''.join(['{:02x}'.format(i) for i in '你'.encode()])
    'e4bda0'
    
  • 从十六进制字符串转换成 bytes 对象,可以调用 bytes.fromhex() 方法:

    >>> bytes.fromhex('e4bda0')
    b'\xe4\xbd\xa0'
    >>> bytes.fromhex('0xe4bda0')   # 输入的字符串,必须完全由十六进制数字组成
    ValueError: non-hexadecimal number found in fromhex() arg at position 1
    

# str

# list

每次迭代多个元素:

>>> L = range(6)
>>> iter_L = iter(L)
>>> [i for i in zip(*[iter_L, iter_L])]   # 两个 iter_L 指向同一个迭代器,因此会累加迭代位置
[(0, 1), (2, 3), (4, 5)]

可以简写为:

>>> [i for i in zip(*[iter(L)] * 2)]    # 每次迭代 2 个元素
[(0, 1), (2, 3), (4, 5)]
>>> [i for i in zip(*[iter(L)] * 3)]    # 每次迭代 3 个元素
[(0, 1, 2), (3, 4, 5)]
>>> [i for i in zip(*[iter(L)] * 4)]    # 每次迭代 4 个元素,如果元素不足则会停止迭代,导致遗漏元素
[(0, 1, 2, 3)]