### 课堂笔记
- 数字: int, float, complex
- 字符串可以用: r'abc', R'bcd' [文本表示]
- 'str' , "str", '''str'''.
- 以字母r或R引导的表示原始字符串
- 不讨论编码, 纯粹是字符串
- 以Unicode在内存中表示
- 字节串: b'hello world'
- 列表 [list]: [1,2,3] 方括号表示
- 字典 [dict]: {"键":"值"}
- 元组 [tuple]: (1,2,)
- 如果元组中只有一个元素的话, 后面的逗号不能重复
- 集合 [set]: {'a', 'b', 'c'}
- 不允许重复
- Python中的变量并不直接存储值, 而是存储了值的内存地址或者引用.
- id() 函数 可以查看对象的内存地址
- is 测试两个对象是否是同一个
- in 测试一个对象是否包含在另一个列表或集合内
- Python属于强类型编程语言, Python解释器会根据赋值或运算来自动判断变量类型
- Python还是一种动态类型语言, 变量的类型也是可以随时变化的.
- isinstace() 函数 测试对象是否是某个类型的实例
- import keyword print(keyword.kwlist) 打印关键字
- Python支持任意大的数字, 具体可以大到什么程度仅受内存大小的限制.
- 由于精度的问题, 对于实数运算可能会有一定的误差, 应尽量避免在实数之间直接进行相等性测试.
- 0.4 - 0.3 == 0.1
- abs(0.4-0.1 -0.3) < 1e-6
- ** 平方运算 等价于 pow()函数
- 复数运算
- abs(x) 计算摸
- x.real 实部
- x.imag 虚部
- 连接字符串
- x = 'good' + 'morning'
- x = 'good' 'morning' #仅适用于字符串常量
- y = 'good'
- x = y 'morning' #错误 不适用于字符串变量
- type() 查看对象类型
- encode() 对字符串进行编码 字符串-->变为字节
- 'hello'.encode('utf-8')
- decode() 对字符串进行解码 字节--->变为字符串
- _.decode('utf-8') #_下划线代表上一次出现的内容
- // 整除
- -15 // 4 --> -4 [向下取整]
- 15.0 // 4 --> 3.0
- pow(3, 2, 8) 等价于(3**2) % 8
- 1 < 2 < 3 关系运算符可以连用
- 1 < 4 > 3
- {1, 2, 3} < {1, 2, 3, 4} 判断是否是子集
- 数值在内存中只有一份
- 不支持 ++ 和 -- 运算符
- 内置函数 [[参考链接](https://docs.python.org/zh-cn/3/library/functions.html "内置函数")]
- map() 会根据提供的函数对指定序列做映射
- 接受两个参数
- 第一个为指定函数
- 第二个为序列 [列表]
- filter() 过滤序列, 由符合条件的元素组成新的列表
- 接受两个参数
- 第一个为判断函数
- 第二个为序列 [列表]
- iter() 用来生成迭代器 [只能向后移动]
- 只有先将列表对象转换为迭代器对象后, 才能用于for循环控制
- next() 当使用一个循环机制需要下一个项时使用
- repr() 返回包含一个对象的可打印表示形式的字符串
- 下面是定义一个函数的例子:
- `def myMap(iterable, op, value):
if op not in '+-*/':
return 'Error operator'
func = lambda i : eval(repr(i) + op + repr(value))
return map(func, iterable)`
- int() Return an integer object constructed from a number or string x, or return 0 if no arguments are given
- str() 返回 object 的 字符串 版本
- reduce() 先引入 [from functools import reduce]
- 接受两个参数
- 以迭代的方式从左到右依次作用到一个序列上
- reversed() 返回一个反向的 iterator
- sorted(iterable, key=None, reverse=False)
- iterable 可迭代对象
- 具有两个可选参数,它们都必须指定为关键字参数
- key 指定带有单个参数的函数,用于从 iterable 的每个元素中提取用于比较的键 (例如 key=str.lower)。 默认值为 None (直接比较元素)
- reverse 为一个布尔值。 如果设为 True,则每个列表元素将按反向顺序比较进行排序
- 举例:
- L = [('b', 2), ('a', 1), ('c', 3)]
- sorted(L, key=lambda x:x[0], reverse=True) # 按照Tuple第一个元素来判断x[0]
- x = ['aaaa', 'bc', 'd', 'b', 'ba']
- sorted(x, key=lambda item: (len(item), item)) # 先按长度比较, 后按字符顺序排序
- random.shuffle() 打乱顺序
- zip() 创建一个来自每个可迭代对象中的元素的迭代器
- 返回一个元组的迭代器,其中的第 i 个元组包含来自每个参数序列或可迭代对象的第 i 个元素
- 当所输入可迭代对象中最短的一个被耗尽时,迭代器将停止迭代
- 类型转换:
- bin() 转换成二进制
- oct() 转换成十进制
- hex() 转换成十六进制
- int() 转换成整数
- int('0x22b', 16)
- bin(54321) # '0b1101010000110001'
- int(bin(54321), 2)
- float()
- ord() 用来返回单个字符的Unicode码
- chr() 用来返回Unicode编码对应得字符
- str() 整体转换成字符串
- ascii() 把对象转换为ASCII码表示形式
- bytes() 用来生成字节串 或 把指定对象转换为特定编码得字节串
- bytes('詹姆斯', 'gbk') # 等价于 '詹姆斯'.encode('gbk')
- str(_, 'gbk') # 还原成字符串
- isinstance(值, 类型) 判断数据类型
- 输入输出
- input()
- print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
- 将 objects 打印到 file 指定的文本流,以 sep 分隔并在末尾加上 end
- 所有非关键字参数都会被转换为字符串,就像是执行了 str() 一样,并会被写入到流,以 sep 且在末尾加上 end
- file 参数必须是一个具有 write(string) 方法的对象;如果参数不存在或为 None,则将使用 sys.stdout
- 由于要打印的参数会被转换为文本字符串,因此 print() 不能用于二进制模式的文件对象。 对于这些对象,应改用 file.write(...)。
### 读书笔记
1. Pycharm开发快捷建
- ctrl + F8 设置断点
- shift + F10 运行
- shift + F9 调试
- F8 跳过
- F7 进入
- shift + F8 退出
- ctrl + Enter 在下方新建行但不移动光标
- Shift + Enter 在下方新建行并移到新行行首
- Ctrl + / 注释(取消注释)选择的行
- Ctrl + Alt + L 格式化代码(与QQ锁定热键冲突,关闭QQ的热键)
- Ctrl + Shift + + 展开所有的代码块
- Ctrl + Shift + - 收缩所有的代码块
- Ctrl + Alt + I 自动缩进行
- Alt + Enter 优化代码,提示信息实现自动导包
- Ctrl + Shift + F 高级查找
- Ctrl + Shift + N 查找项目中的任何文件
- Ctrl + N 查找所有的类的名称
- Ctrl + B 查看函数定义
2. 字符串
- title() 首字母大写
- upper() 全部大写
- lower() 全部小写
- strip() 同时剔除字符串两端的空白
- rstrip() 确保字符串末尾没有空白
- lstrip() 剔除字符串开头的空白
- str() 将内容转换为字符串
3. 数字
- ** 代表乘方
4. 注释
- 单行注释 #注释内容
- 多行注释 """注释内容"""
5. 列表 [由一系列按特定顺序排列的元素组成]
- append() 在列表末尾添加元素
- insert(索引, '插入元素') 在列表指定位置插入元素
- del 列表名[索引] 删除指定位置的元素
- pop() 可删除列表末尾的元素, 并且能让你接着使用它
- pop(索引) 可以指定索引删除
- remove('元素值') 只要知道元素值就可以删除该元素[只能删除第一个指定的值, 若出现多次, 需要循环来判断删除]
- sort() 排序
- sort(reverse=True) 逆序
- sorted(列表名) 临时排序, 不影响原始的列表序列
- reverse() 不排序, 只是反转列表元素
- len(列表名) 获取列表的长度
6. for item in list_of_items:
- 缩进代码
- 每个缩进的代码都是循环的一部分
- 没有缩进的代码只执行一次
- 冒号告诉python, 下一行是循环的第一行.
7. 数值列表
- range(起始索引, 结束索引) 生成数字集, 不包含第二个结束索引
- list(range(起始索引, 结束索引)) 将一系列数字转换为一个数字列表
- range(起始索引, 结束索引, 指定步长) 间断生成一系列数字
- min() 计算最小值
- max() 计算最大值
- sum() 计算总和
- squares = [value**2 for value in range(1, 11)] 列表解析
- 等价于
- for value in range(1, 11):
- squares.append(value**2)
8. 切片 [列表的一部分]
- [起始索引: 结束索引] 不包含第二个结束索引
- [起始索引:] 从起始索引到末尾
- [:结束索引] 从列表头开始
- for value in list[:3]: 遍历前三个
- print(value.title())
- 复制列表
- [:] 同时省略起始索引和结束索引
- 举例:
- my_foods = ['pizza', 'falafel', 'carrot cake']
- friend_foods = my_foods[:]
- my_foods.append('cannoli')
- friend_foods.append('ice cream')
- friend_foods 指向的是从 my_foods 复制出来的一个列表副本
- 若 friend_foods = my_foods, 则 friend_foods 和 my_foods 指向同一个列表
9. 元组 [不可变的列表]
- 如果需要存储的一组值在程序的整个周期内都不变, 可使用元组
- 举例:
- dimension = (200, 50)
- dimension[0] = 250 会报错! 不能修改元组, 即不能给元组的元素赋值
- dimension = (250, 100) 但是可以给存储元组的变量赋值
10. 代码格式
- 缩进: 每级缩进都使用四个空格
- 行长: 每行不超过80字符
- 空行: 使用空行来组织程序文件
11. if-else
- if expression : else expression :
- 多个else 用 elif
12. 字典:
- {'键': 值}
- Python 不关心键值对的添加顺序, 而只关心键和值之间的关联关系.
- 新增/修改: 字典名['键'] = 值
- 删除: del 字典名['键']
- 遍历: for key, value in 字典名.items():
- 注: 遍历时声明两个变量用于存储键-值对中的值, 但是这两个变量可以使用任何名称.
- for key in 字典名.keys(): # 遍历字典的所有键
- for key in sorted(字典名.keys()): # 按顺序遍历字典中的所有键
- for value in 字典名.values(): # 遍历字典中的所有值
- 若设计到重复:
- 则使用 for value in set(字典名.values()):
- [set]集合: 类似于列表, 但每个元素都必须是独一无二的.
13. 输入: input
- message = input("提示信息")
- print(message)
- 若是数字类型, 则使用int()转换为数字
14. While 条件表达式:
- break # 立即退出此循环
- continue # 返回到循环开头, 并根据条件判断决定是否继续执行
15. 函数: 带名字的代码块, 用于完成具体的工作.
- def 函数名():
- 函数体
- ...
- 实参: 调用函数时传递给函数的信息.
- 形参: 在定义函数时, 函数完成其工作所需要的一项信息.
- 模块: 扩展名为 .py 的文件
- 导入模块时: import语句允许在当前运行的程序文件中使用模块的代码.
- as
- 给函数指定别名: from 模块名 import 函数名 as 别名
- 给模块指定别名: import 模块名 as 别名
- 导入模块中的所有函数: from 模块名 import *
16. 类: 模拟任何信息
- 类中的函数称为 方法
- 通过实例访问的变量称为 属性
- _init_(self, ...):
- self形参必不可少, 还必须位于其它参数的前面.
- self是一个指向实例本身的引用, 可以访问类中的属性和方法.
- 当通过 类名() 创建实例时, 不需要传递self [自动传递的]
17. 导入模块 [car 为模块名, 文件为car.py | Car, ElectricCar为类名]
- from car import Car # 从模块中导入一个类
- from car import Car, ElectricCar # 从模块中导入多个类
- import car # 导入整个模块
- form 模块名 import * # 导入模块中的所有类
18. 文件
- with open('pi_digits.txt') as file_object:
- contents = file_object.read()
- print(contents)
- with 在不需要访问文件后将其关闭
- open() 打开文件
- read() 读取文件内容
-
- 逐行读取:
- for line in file_object:
- print(line.rstrip())
- 或
- lines = file_object.readlines() # 先将文件的各行存储在一个列表中
- 后面可以在with代码快外使用该列表:
- for line in lines:
- print(line.rstrip())
- 写入文件:
- with open(filename, 'w') as file_object:
- file_object.write('I love programming.')
- 第一个参数是打开文件的名称
- 第二个参数告诉Python, 以写入参数打开这个文件.
- w 写入模式 [注: 若指定的文件已经存在, Python将返回文件对象前清空该文件]
- r 读取模式
- a 附加模式 [注: 以便将内容附加到文件末尾,而不是覆盖文件原来的内容]
- r+ 读取和写入文件的模式
19. 异常
- try-except
- else 依赖于 try 代码块成功执行的代码都放在 else 代码块中
20. 分析文本
- split() 以空格为分隔符将字符串分拆成多个部分,并将这些部分都存储到一个列表中
21. 存储数据
- json.dump() 存储
- 函数 json.dump() 接受两个实参:要存储的数据以及可用于存储数据的文件对象。
- json.load()
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jungle8884@163.com