#人生苦短,我用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