数据类型和变量

字符串

  • r'' 表示''内部的字符串默认不转义
  • '''...'''输入多行字符

    空值

  • 空值用None表示,None不同于00是有意义的,而None是一个特殊的空值

    常量

  • 通常用全部大写的变量名表示常量,但Python根本没有任何机制保证常量不会被改变

    字符串和编码

    字符编码

  • 在计算机内存中统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转为UTF-8编码

  • str在内存中以Unicode表示,要在网络上或保存磁盘中需要变为以字节为单位的bytes

    • Python对bytes类型的数据用带b前缀的单引号或双引号表示
    • 以Unicode表示的str通过encode()方法可以编码为指定的bytes
    • 如果从网络或磁盘读取了字节流,那么读到的数据就是bytes,用decode()bytes转为str
      1. #!/usr/bin/env python3 ->告诉Linux/os X系统,这是一个Python可执行程序
      2. # -*- coding: utf-8 -*- ->按照UTF-8编码读取源代码
      3. '中文'.encode('utf-8') #b'\xe4\xb8\xad\xe6\x96\x87'
      4. b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')#中文

      f-string

  • print(f'Hello {r}')该代码中,{r}被变量r的值替换

    使用list和tuple

    list

  • list.insert(1,'HHT')'HHT'插入到索引号为1的位置

  • list.pop(i)删除指定位置的元素,其中i是索引位置

    tuple

  • tuple一旦初始化就不能够修改,也没有append()insert()这样的方法

    • tuple所谓的“不变”是每个元素的志向永远不变,但如果指向一个list,这个list本身的元素是可变的
  • 只有1个元素的tuple定义时必须加一个逗号,来消除括号的歧义,如t = (1,)

    条件判断

    if

  • 从上往下判断,如果在某个判断上是True,把该判断对应的语句执行后,就忽略剩下的elifelse

  • 只要x是非零数值、非空字符串、非空list等就判断为True,否则为False

    循环

    for, while, break, continue

  • list(range(5))输出为[0, 1, 2, 3, 4]

    使用dict和set

    dict

  • 如果key不存在,dict会报错

    • 通过'HHT' in dict判断key是否存在
    • 通过dict.get('HHT',-1)如果key不存在返回-1,或自己指定的value
  • dictkey是不可变的,如字符串和整数都是不可变的,不能用list作为key

    set

  • set同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”

  • 如何理解str是不可变的,list是可变的?

    1. a = 'abc'
    2. a.replace('a','A')
    3. print(a) #'abc'
  • a本身是一个变量,它指向的对象的内容才是'abc',调用的replace是作用在字符串对象'abc'上的,replace方法并没有改变原字符串对象,而是创建了一个新字符串'Abc'并返回,变量a仍指向原有的字符串'abc'