Python学习笔记

#人生苦短,我用python#

###type(类型)
  - 用来检查值的类型,该函数会将检查的结果作为返回值返回
  - 通过type()函数查看当前对象类型
  - python是强类型语言,对象一旦创建则不能修改
### id(标识)
  - 用来标识对象的唯一性,每个对象有唯一的id
  - 通过id()函数来查看对象的id
  - 一个对象的id值在CPython解释器里就代表它在内存中的地址
  - 对象一旦创建id不改变
### value(值)
  - 值就是对象中存储的具体数据
  - 有些对象值可以改变
### 类型转换
  - 类型转换不是改变对象本身的类型,而是根据当前对象的值创建一个新的函数
### 算数运算符(略)
  - //:整除(只返回结果的整数位)
  - **:幂(幂运算)
### 关系运算符(略)
  - 在py中可以对两个字符串进行比较运算(类似于C中的strcmp??)
  - 实际上比较两字符串的Unicode编码,逐位比较(与strcmp类似)
    > 注意:如果不希望比较两字符串的Unicode编码,则需要转换为数字再比较
  - is:比较两个对象是否同一个对象,比较的是id
  - is not:比较两对象是否不是同一对象,比较id
### 逻辑运算符
  - and:逻辑与(且)
  - or:逻辑或
  - not:逻辑非
    > python中也存在逻辑短路
### 列表(list)
  - 类似于数组
  - 列表名 = [元素,元素,----]
  - len()函数可获取列表中元素的个数
  - min()函数获取列表中最小值
  - max()函数获取列表中最大值
  - 如果索引是负数,则从后向前获取元素,-1表示倒数第一个,以此类推
  - 切片
     - 通过切片来获取指定的元素
     - 语法:列表[起始:结束]
      1. 通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素
      2. 不会影响原来列表
      3. 省略结束位置,则截取到最后
      4. 省略起始位置,则会从第一个元素开始截取
      5. 都省略则相当于原列表
     - 语法:列表[起始:结束:步长]
      1. 步长默认为1,指每次获取元素的间隔
  - 通用操作
     - +号可以将两个列表拼接为一个列表
     - *号可以将列表重复指定次数
     - in 用来检查指定元素是否存在于列表中
     - not in 用来检查指定元素是否不再列表中
  - 方法
     - e.g.:xxx.index()
     - 方法实际上是和对象关系紧密的函数
     - xxx.index() 获取指定元素在列表中的索引
     - xxx.count() 获取指定元素在列表中出现的次数
  - 序列(sequence)
    - 序列是Python中最基本的一种数据结构
    - 序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引),并且序列中的数据会按照添加的顺序来分配索引
    - 序列的分类:
       - 可变序列(序列中的元素可以改变):
          > 列表(list)
       - 不可变序列(序列中的元素不能改变):
          > 字符串(str)    
          > 元组(tuple)
  - 修改列表(不可变序列无法通过索引修改)
     - 类似数组
     - del 列表名[2] 删除索引为2的元素
     - 通过切片也可修改列表
     - 使用新元素替换旧元素
        - 列表[0:2]=['xxx','xxx']
        - 也可 列表[0:2]=['xxx','xxx','xxx']
     - 向列表首位插入新元素
        - 列表[0:0]=['xxx']
     - 当设置了步长时,序列中新元素个数必须和切片中匹配的元素个数一致
     - 通过切片可删除元素
     - 可通过list()函数将不可变序列转换为列表再行修改
  - 列表的方法
     - 列表.append() 向列表的最后添加一个元素
     - 列表.insert(a,b) 向列表的指定位置插入一个元素
        - 参数 
          > a:要插入的位置  b:要插入的元素
     - 列表.extend() 实用新序列来拓展当前序列
        - 需要一个序列作为参数,将该序列中的元素添加到当前列表中
     - 列表.clear() 清空序列
     - 列表.pop(2) 删除索引为2的元素,并返回被删除的元素
     - 列表.pop() 留空的话默认删除最后一个元素
     - 列表.remove() 删除指定值的元素,若相同值元素有多个,只会删除第一个
     - 列表.reverse() 反转列表
     - 列表.sort() 用来对列表中元素进行排序,默认**升序**排列
        - 若需要降序排列
        - 则使用 列表.sort(reverse=Ture)
  - for循环
     - 定义stu为一列表,列表中有各种元素
     - 则`for s in stu `
           ` print(s)`
     - 则变量s每次循环都改变一次,取值为一个元素
     - 遍历整个列表后退出循环
  - range() 可用来生成一个自然数的序列
     - 如`r = range(5)`生成一个这样的序列[0,1,2,3,4]
     - 该函数需要三个参数
        1. 起始位置(可省略,默认为0)
        2. 结束位置
        3. 步长(可省略,默认为1)
    > range()可以创建一个执行指定次数的for循环(配合for循环使用)
    >> 如 `for i in range(30)` i 会遍历0到30
### 元组(tuple)
  - 元组是一个不可变的序列
  - 操作方法基本与列表一致
  - 操作元组时,将元组当做不可变的列表就行
  - 一般希望数据不改变时,就使用元组
  - 元组名 = (元素,元素,----)
  - 当元组不为空元组时,括号可省略
  - 如果元组只有一个值,里边必须要有一个 , ,不然会识别为整型
  - 元组的解包(解构)
    - 就是指将元组中每一个元素都赋值给一个变量
    - 如`tuple = 1,2,3,4`
  - `a,b,c,d = tuple`
    > 交换 a 与 b 的值,利用元组的解包(解构)
    `a , b = b , a`
  - 在对元组进行解包时,变量的数量必须和元组中的元素的数量一致
  - 也可以在变量前加一个*,这样变量将会获取元组中所有剩余的元素
  - 加*的变量构成成一个列表
  - 不能同时出现两个或两个以上的*变量
    > 列表、字符串也可以解包
### 字典(dict)
  - 字典属于一种新的数据结构,称为映射(mapping)
  - 字典的作用和列表类似,都是用来存储对象的容器
  - 列表存储数据的性能很好,但是查询数据的性能的很差
  - 在字典中每一个元素都有一个唯一的名字,通过这个唯一的名字可以快速的查找到指定的元素
  - 在查询元素时,字典的效率是非常快的
  - 在字典中可以保存多个对象,每个对象都会有一个唯一的名字,称为键(key),这个对象称为值(value),所以字典也称为键值对(key-value)结构
  - 每个字典中都可以有多个键值对,而每一个键值对我们称其为一项(item)
  - 使用{}来创建字典 如`d = {}`
  - 语法:
    - {key:value,key:value,----}
    - 字典的值可以是任意对象
    - 字典的键可以是任意的不可变对象
    - 字典的键不能重复,若出现重复的,后边的替换前边的
    - 需要根据键来获取值
      - 如`print(d['name'],d['age'])`
  - 或者使用dict()函数创建字典
    - 如`d = dict(name='xxx',age=18,gender='男')`
  - 也可将一个包含有双值子序列的序列转换为字典
    - 双值序列:序列中只有两个值,[1,2] ('a',3) 'ab'
    - 子序列:序列中的元素也是序列
      - 如`[(1,2),(3,5)]`
  - len()函数可获取字典中键值对个数
  - in 可检查字典中是否包含指定的键(not in)
  - 获取字典中的值:
    - `d['age']` (此方法键不存在抛出异常)
    - 通过 键名.get('age') 来获取(此方法若键不存在返回None)
      - 也可指定一个默认值作为第二个参数,获取不到值时将返回此默认值,如`d.get('name','默认值')`
  - 修改字典
    - d[key] = value
      - 如果key存在则覆盖,不存在则添加
    - d.setdefault('name','xxx')
      - 如果键name存在,则返回name的值,若没有name这个键,则添加一个键值对,键为name,值为xxx
    - d1.update(d2)
      - 将d2中的键值对添加到d1中,如果有重复的key,则d2中的会替换掉d1中重复的
    - del d('a') 可以删除字典中键为a的键值对
    - d.popitem() 随机删除一个键值对,一般都会删除最后一个键值对,返回一个元组,元组中有两个元素,key和value
    - d.pop('a') 删除指定的键值对,返回被删除的值
      - 若删除不存在的key,抛出异常
      - 改为d.pop('a','默认值') 则返回默认值
    - d.clear() 清空字典
    - d.copy() 用于浅复制字典,复制以后的对象和原对象独立,修改一个不会改变另一个
      - 如`d2 = d1.copy()`
      - 注意:浅复制会简单复制对象内部的值,如果值也是一个可变对象,这个可变对象不会改变
  - 遍历字典
    - d.keys() 该方法会返回一个序列,序列中保存有字典的所有的键
      - 可以通过遍历keys()获取所有的key
        - 如`for k in d.keys():`
    - d.values() 返回一个序列包含所有的值
    - d.items() 返回字典中所有的项
      - 返回一个序列,包含有双值子序列
      - 双值分别是key和value
### 集合
  - 集合和列表非常相似
  - 不同点:
    1. 集合中只能存储不可变对象
    2. 集合中存储的对象是无序(不是按照元素的插入顺序保存)
    3. 集合中不能出现重复的元素
  - 使用{}创建集合
    - s = {1,2,3,4}
  - 使用set()函数创建集合
    - s = set() 创建了一个空集合
    - 可以通过set()将序列和字典转换为集合
        > 转换为字典时,只会包含字典中的键(key)
  - s.pop() 随机删除并返回一个集合中的元素
  - s.remove() 删除集合中的指定元素
  - 其余函数类似字典
  - 集合的运算
    - 在对集合做运算时,不会影响原来的集合,而是返回一个运算结果
    - 交集运算(&)
    - 并集运算(|)
    - 差集运算(-)
    - 异或运算(^)获取只在一个集合中出现的元素
    - <= (>=)检查一个集合是否是另一个集合的子集
    - < (>)检查一个集合是否是另一个集合的真子集
### 函数
  - 关键字参数,可以不按照参数定义的顺序去传递,而直接根据参数名传递参数
    - fun(b=1,c=2,a=3)
  - 不定长参数
    - 在定义函数时,可以在形参前加一个*,这样这个形参将会获取到所有的实参,并保存在一个元组中
    - 带*参数只能有一个
    - 带*参数不是必须写在最后,但其后的所有参数必须以关键字参数的形式传参
    - 带*参数只能接受位置参数,而不能接受关键字参数
    - **形参可以接受其他的关键字参数,并保存在一个字典中
    - **形参只能有一个,并且必须写在所有参数最后
    - 传递实参时,可以在序列的参数前添加*号,这样会自动将序列中的元素作为参数对应传递,要求序列中元素的个数必须和形参个数一致
    - 通过**来对一个字典进行解包,类似上条
  - help() 是Python中的内置函数
    - 可以查询py中的函数用法,包括用户自定义的函数
  - locals() 用来获取当前作用域的命名空间,返回值是字典
  - 高阶函数
    - 高阶函数至少要符合以下两个特点中的一个
      1. 接收一个或多个函数作为参数
      2. 将函数作为返回值返回
  - filter() 可以从序列中过滤出符合条件的元素,保存到一个新的序列中
    - 参数:
      1. 函数,根据该函数来过滤序列(可迭代的结构)
      2. 需要过滤的序列(可迭代的结构)
      3. 返回值:过滤后的新序列(可迭代的结构)
  - 匿名函数 lambda 函数表达式
    - lambda函数表达式专门用来创建一些简单的函数,是函数创建的又一种方式
    - 语法:`lambda a,b : a+b`即lambda 参数列表 : 返回值
  - map() 可以对可迭代对象中所有元素做指定的操作,然后将其添加到一个新的对象中返回
原文地址:https://www.cnblogs.com/clqnotes/p/12919917.html