Python
2019-03-20 19:31:38 5 举报
AI智能生成
登录查看完整内容
python3学习笔记
作者其他创作
大纲/内容
运算器
控制器
存储器
输入设备
输出设备
硬件
系统软件
应用软件
软件
计算机
机器语言
汇编语言
编译类
解释类
高级语言
脚本语言
计算机编程语言
整数存储与换算
1Byte = 8bit
1KB = 1024Byte
1MB = 1024KBB
1GB = 1024MB
1TB = 1024GB
...
文件单位换算
二进制
计算机常识
软件质量
开发效率
可移植性
库支持丰富
组件集成
Why
运行效率
劣势
Google
Youtube
搜狗邮箱
知乎
哪些公司在用?
系统编程
GUI
网络脚本
Django
Flask
Web
数据库
快速原型
数学及科学计算
能做什么?
面向过程,函数式编程,面对对象
优势
windows-3.71
Sublime Text3
安装
Python概览
IDLEIDLE
Windows 命令提示符
SublimeText Console(自带Python解释器)
交互式提示符
1、编写脚本代码,保存为*.py
2、命令提示符python*.py
注:python *.py > result.txt
脚本方式
Python 运行
程序
模块
语句
表达式:创建、处理对象
概念层级
包含字母、数字、下划线
只能以字母或下划线开头
不能有空格
避免Python关键字或函数名
简短且有描述性
区分1,l,0,o
规则
创建:第一次赋值时生成的
变量无类型约束
类型取决与关联对象
类型
使用
Python 自动释放未被引用的对象
内部原理依据对象引用计数器统计的数值
垃圾回收
判断字面值是否相等: ==
判断是否地址相同:is
256以下的整数,已被Python缓存
多个变量引用一个对象
共享引用
变量
int
float
Decimal
Fraction
数字
字符串:str
列表:list
字典表:dict
元组:tuple
文件:file
集合:set
True
False
布尔:Boolean
空:None
函数:function
类:class
程序单元
核心数据类型
对象类型
Python 变量、类型及存储
声明、赋值、使用
表达式
'{0:.2f}'.format(3.3333)
显示
>
<
>=
<=
==
!=
比较,返回布尔型结果:True,False
/
//
相除
math.floor()往左
math.trunc()往0
round()四舍五入
取整
无限精度,仅受限于内存与计算机配置
整型
0o 8进制
0x 16进制
0b 2进制
字面值
oct()
hex()
bin()
转换
十六进制、八进制、、二进制
True : int
布尔型
数值
''
\"\"
\"\"\"##\"\"\" 可以生成文档,不会给忽略可以显示的
声明
\\
\\'
\\\"
\ 换行
\\b 退格
\\t TAB键
\\a
转义符
r'......'
忽略转义符
.split()
.startswith()
.endswith()
.find()
基本操作
字符串
任意对象的有序集合
通过索引下标的访问元素
可变长度
属于可变序列
.append() 追加一个元素
.extend() 扩展 一个列表
.sort()
.index()
.count()
.reverse()
常用操作
[:]
.copy()
拷贝副本
注意:引用类型,支持原为改变
列表 list[ ]
{键:值,....}
dict(键=值)
d['键']
获取
d.update(d2)
合并
操作
keys()
values()
items()
属性
将keys()放入列表
使用全局函数sorted()
排序键
字典表 dict
任意对象有序集合
长度固定,任意类型,任意嵌套
属“不可变”类型
通过下标访问
特征
(元素,)
index(val):查找索引
count(val):统计数量
子主题
namedtuple
元组tuple()
r 读
w 写
a 追加
b 操作二进制文件
+ 即刻读又可写
mode
基本语法
read()
readline()
readlines()
close()
dump(对象,目标文件)
load(文件)
pickle存取Python对象
文件
列表 list
可变
字符串str
元组 tuple
字节数组
不可变
序列
字典表dict
映射
Set {}
集合
boolean
Decimal 高精度
浮点型
函数 function
生成器 Generator
类 class
方法
可调用
None 其他Null
视图 view
其他
Type
内部
汇总
数据类型
PEP8
缩进4空格
一行不超过79
空行
代码格式指南
代码风格
基本
序列赋值
*变量,获取剩余元素到list
扩展序列解包赋值
a = b = 0
多目标赋值
参数化赋值
赋值语句
函数调用
方法调用
sep='|' 默认空格 分隔符
end='/n' 默认在后面加了个/n
file =指定文件
print()
打印操作
一般格式
多重分支
a = Y if X else Z
三元运算符
if...语句
break
continue
pass
else
while循环
2.x 3.x 有区别
range()
enumerate()
for循环
流程控制
__next()__
迭代协议
已经实现
迭代器对象
iter()->__iter()__用于生成迭代器
可迭代对象
迭代工具for...推导...map...
map()
zip()
内置可迭代对象
python哪些是可迭代循环呢?实现了迭代协议的对象
迭代协议怎么实现的,它的原理是什么呢?内部有一个方法叫__next__能够获取下一个元素
这个东西怎么来的呢?其实在python里边,内部在定义这个对象的时候都已经帮我们写好了,但是有一些没有,如list它是iter()额外的帮我们做了一个工作...
迭代
语句与表达式
最大化代码重用
最小化代码冗余
过程分解
why
def函数名 (参数1,....): 函数体
定义
函数名(实际参数)
调用
Built-in
global
Global
nonlocal
Enclousure
Local
变量作用域
不可变类型,传递副本给函数,函数内操作不影响原始值
可变类型,传递地址引用,函数内操作可能会影响原始值
传递
位置匹配
关键字匹配
默认值(调用时可以省略传值)
*args 任意数量参数
**kwargs
匹配
参数
定义匿名的函数
基本格式:lambda 参数1 ,... : 函数
Lambda表达式
map(函数,可迭代对象)
filter(函数,可迭代对象)
高级工具
函数
import 如: import math
from 如from math import pi
importlib.reload(只能是模块)
指令
__init__
包
代码重用
命名空间
实现数据或服务共享
1、找到模块文件
2、编译为字节码
3、运行模块文件
步骤
1、程序主目录
2、环境变量
3、标准库
4、扩展库
搜索范围
包与模块管理
#面向过程代表C 核心就是数据结构和算法
UML、OOA
OOA 面向对象分析
OOD 面向对象设计
OOP 面向对象编程
1、分析对象特征行为(分析对象)
2、写类描述对象模板(类定义对象代码模板(蓝图))
3、实例化,模拟过程(实例化(内存对象))
实现
封装
继承
多态
预定义的__init__初始化对象
预定义的__repr__
预定义的__str__
预定义的__del__
if __name__ == __main__
@xxx.deleter
@xxx.setter
@property 声明
装饰器
面向对象编程
语法错误:SyntaxError
语义错误:ZeroDivisionError
逻辑错误
错误类型
try: 有可能出现的异常代码
except: 异常类型as实例:捕获特定异常
finally:不论是否遇到异常均会执行
raise:手动抛出异常
else:未遇到异常
异常处理
错误异常处理
对代码最基本(函数、方法)的测试
给与特定条件判断结果是否符合预期
相对整个程序的测试,单元测试简化了测试任务
unittest 模块
单元测试
集成测试
系统测试
验收测试
回归测试
测试级别
assertEqual(值,表达式)是否相等
assertTrue() 是否为真
assertIn() 是否包含
assertAlmostEqual() 是否约等于
assertIs() 是否为同引用
assertIsNone() 是否为空
assertIsInstance() 是否某类型实例
assertGreater() 是否大于
断言
测试用例类继承自 unittest.TestCase
test_ 定义功能测试函数名
setUp() 函数定义准备初始化代码
tearDown() 函数执行清理工作
装置
代码组织
测试
www.jetbrains.com
pycharm
IDE配置
代码提示...
Anaconda
ctrl+shift+8
代码格式第八标准
AutoPEP8
写!按Tab 或 html:5 Tab键
html、爬虫..
Emmet
侧边栏增强
SideBarEnhancements
读取、计算、打印、循环
SublimeREPL
https://packagecontrol.io 包管理器
ctrl+shift+p
sublimetext
notepad++
代码编辑器
格式化
小数位的处理
import random
random.choice 序列中随机选择一个值
random.sample() 获取指定数目序列
random.shuffle() 打乱顺序
random.randint() 生成范围内的随机整数
random.random() 生成随机浮点数
random.getrandbits() 生成指定bit位数的随机数
随机数
import datetime
date
time
year
month
day
hour
minute
seconds
datetime
日期时间到字符串 datetime.datetime.strftime('格式')
%Y 四位年份
%y 二位年份
%m 二位月份
%d 二位日期
%H 二位小时
%M 二位分钟
%S 二位秒数
%f 微秒
%w 星期数,0开始的
占位符
格式转换
days
hours
时间差 timedelta
日期时间
数值与日期
f.write(str($src))
f.read()
eval()
文本文件
扁平文件
.dumps(obj) :将对象序列为字符串
.loads(s) :从字符串反序列化对象
序列化为字符串
.load(file) #以二进制的方式读取
序列化对象到文件
pickle
#多个对象可以存储一个文件里
.open('dbfile')
.close()
db['key'] = obj
len(db)
del db['key']
shelve
ORM
对象持久化
str 字符串
bytes 字节 (不支持原位改变)
bytearray 字节数组 (支持原位改变)
字符集:赋值一个编码到某个字符,以便在内存中表示
编码 Encoding:转换字符到原始字节形式
解码 Decoding:依据编码名称转换原始字节到字符的过程
字符编码架构
编码只作用于文件存储或中间媒介转换时
内存中总是存储解码以后的文本
字符串存储
概述
存储在一个Byte 0-127
ASCII
存储在一个Byte 128-255
latin-1
0-127 使用单字节
128-2047 双字节存储
>2047 3-4Byte
每Byte使用 128-255
可变字节
UTF-8
2 Byte存储字符(另加2Byte作为标识)
UTF-16
4 Byte
UTF-32
字符编码
ord() 获取字符代码点
chr() 获取代码点对应字符
str.encode('编码') 默认utf-8 将特定字符编码
str.decode('编码') 将字符编码解码为字符文本
文件操作的时候默认GBK 根据操作系统的默认编码
import sys 导入系统模块
sys.getdefaultencoding() 获取当前系统的默认编码
内置函数
手动声明 b' '
字符串编码 str.encode()
构造函数 bytes()
bytes
.decode() 解码为字符串
bytearray
类型转换
# byte order mark 用于标记字节序(byte order)
BOM处理
Regular Expression
一个文本模式,描述在搜索文本时要匹配的一个或多个字符串
概念
数据验证
文本扫描
文本提取
文本替换
文本分割
典型场景
普通字符
^
$
.
|
?
*
+
()
[]
{}
'
\"
需转义
元字符
语法
. 除\外的所有字符
\\d 数字,等同于[0-9]
\\D 非数字,等同于[^0-9] (^取反)
\\s 空白字符 \\t\\\\f\\v
\\S 非空白字符 [^\\t\\\\f\\v]
\\w 字母数字字符[a-zA-Z0-9_]
\\W 非字线数字[^a-zA-Z0-9_]
单字,预定义元字符
| yes|no
批量备选
? 0或1次
* 0或者多次
+ 1或者多次
{n} n次
特定
量词(字符、元字符,字符集如何重复)
贪婪(默认):尽量匹配最大范围结果
尽量匹配最小的范围结果
方法:量词后追加?
??
*?
+?
例:
非贪婪
贪婪与非贪婪
^ 行首
$ 行尾
\\b 单词边界
\\B 非单词边界
\\A 输入开头
\\Z 输入结尾
注:或因上下文差异有不同表现
边界匹配
import re
模式对象,表现编译后的正则表达式(编译为字节码并缓存)
re.compile(r'模式')
编译
查找所有非重叠匹配项
返回list
.findall()
匹配,仅从起始位置
返回 MatchObject
任意位置搜索
查找所有匹配项
返回包括MatchObject元素的迭代器
.finditer()
RegexObject 正则对象
表现被匹配的模式
参数为0或空返回整个匹配
有参时返回特定分组匹配细节
参数也可以是分组名称
.group()
返回包含所有子分组的元组
.groups()
返回特定分组的起始索引
.start()
返回特定分组的终止索引
.end()
返回特定分组的起止索引元组
.span()
以字典表形式返回分组名及结果
.groupdict()
MatchObject 匹配对象
从匹配模式中提取信息
创建子正则以应用量词
限制备选项范围
重用正则模式中提取的内容 \\1
场景
(模式)
(?P<name>模式)
匹配对象内 m.group('name')
模式内 (?P=name)
表现内 \\g<name> 如:\\g<1>
引用
Group 编组
分割字符串
替换字符串
替换并返回替换的数量
字符串操作
改变正则的默认行为
re.S 指定\".\
编译标记
re.purge() 清理正则缓存
模块级别的操作
应用
Python 正则
正则表达式
dos 命令行工具
shell 脚本
终端
系统管理
提供一组功能映射Python运行时的操作系统
sys
提供跨平台可移植的操作系统编程接口
os.path 提供文件及目录工具的可移植编程接口
os
系统模块
当前系统平台
sys.platform
当前版本信息
sys.version
模块的路径集
sys.path
已经载入模块列表
sys.modules
平台与版本
sys.exe_info() 获取最后一次异常细节
traceback.print_tb(sys.exc_info()[2])
观察异常细节
sys.argv 以列表形式返回
sys.argv[0] 获取某一个参数
命令行参数
sys.stdin 标准输入流 默认情况下等同于input()
sys.stdout 标准输出流 默认情况下等同于print()
sys.stderr 标准错误流
sys.stderr.write('错误信息')
sys.stderr.flush
标准流
os.environ
shell 变量
os.getcwd() 获取当前工作目录
os.chdir() 改变目录
os.listdir() 列举目录内容
os.getpid() 获取当前进程ID
os.getppid() 获取当前父进程ID
管理工具
os.system() Python脚本中运行 例:os.system('dir')
os.popen() 运行命令并连接输入输出流 例:txt = os.popen('dir').read()
运行shell命令
os.mkdir('目录名) 创建目录
os.rmdir('目录名') 删除目录
os.remove('文件名') 删除文件
文件处理
os.sep 分隔符
os.pathsep 路径分隔符
os.curdir 相对当前目录符号
os.pardir 相对上级目录符号
可移植工具
os.isdir(path) 是否是目录
os.isfile(path) 是否是文件
os.exists(path) 是否存在
os.split(path) 拆分路径
os.splitext(path) 拆分路径扩展名
os.join() 连接路径
os.normpath() 标准化路径
os.abspatah() 绝对化路径
路径模块 .path
系统工具
程序由单个步骤序列构成
包含独立子任务的程序执行性能低
非并发
异步、高效
分解子任务、简化流程与逻辑
并发
一个程序的执行实例
每个进程有自己的地址空间、内存、数据栈及辅助数据
进程 process
同一进程内,可被并行激活的控制流
共享相同上下文(空间地址、数据结构)
便于信息共享和通信
线程访问顺序差异会导致结果不一致(条件 race condition)
特点
线程 thread
Global Interpreter Lock
Python 代码由虚拟机(解释器主循环)控制
主循环同时只能有一个控制线程执行
Python GIL 全局解释器锁
_以不推荐使用了
没有控制进程的结束机制
只有一个同步原语(锁)
功能少于 threading模块
_thread 模块
自定义Thread派生类,重写run方法逻辑
构造
.start() 启动线程
.join() 要求主线程等待
.name 线程名称
.Thread 线程类
.current_thread() 获取当前线程
.current_thread().name 获取当前线程的名称
效率较慢,有一个等待,阻塞的过程
lock = threading.Lock() #构造锁
.acquire() 获得
.release() 释放
支持上下文操作 with lock:
同步原语:锁
threading 模块
多线程(通常适合IO操作)
Queue(maxsize=0) 构造实例
.task_done() 声明当前队列任务处理完毕
.join() 队列所有项处理完毕前阻塞
Queue FIFO
LifoQueue LIFO
PriorityQueue 优先队列
queue 模块
队列
充分运用多核、多CPU的计算能力,适用于计算机密集型任务
多进程(通常适合计算操作)multiprocessing 模块
ThreadPoolExecutor
ProcessPoolExecutor
concurrent.futures 模块
并发编程
%-formatting
str.format
例:print(f'{threading.current_thread().name}函数执行结束于:{time.ctime()}')
f-string
格式化字符串
用于管理和增强函数和类行为的代码
提供一种在函数或类定义中插入自动运行代码的机制
更明确的语法
更高的代码可维护性
更好的一致性
将函数赋给变量
将函数作为参数传递
()() 返回结果 不加 返回对象
nonlocal适用于嵌套函数中内部函数修改外部变量的值
函数嵌套及跨域访问
函数基础
通用性
可以用在普通函数上也可以用在类的方法上
函数定义装饰器
__call__
用在类的方法上(可能会出现点问题),同时存在self (可以解决,其他方式解决)
类定义装饰器
添加参数,提高灵活性
装饰器参数
编写
声明函数方法为静态方法
@staticmethod
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号)
CSV读取
TSV tab separated values(为用制表符tab分隔的文件)
TSV读取
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。
dumps是将dict转化成str格式,loads是将str转化成dict格式。dump和load也是类似的功能,只是与文件操作结合起来了。
False — false
Ture—true
None—null
类型差异:
http://json.org/
JSON
book = xlrd.open_workbook('文件名') #打开Excel文件读取数据
for sheet in book.sheets() #for循环print(sheet.name)
names = data.sheet_names() #返回book中所有工作表的名字
table = data.sheets()[0] #通过索引顺序获取
table = data.sheet_by_index(sheet_indx)) #通过索引顺序获取
table = data.sheet_by_name(sheet_name) #通过名称获取
nrows = table.nrows #获取该sheet中的有效行数
ncols = table.ncols #获取列表的有效列数
table.row_values(i) #获取整行值
table.col_values(i) #获取整列的值
import xlrd
第三方包
Excel数据文件处理
数据库管理系统(Database Management System)
数据库管理员(Database Administrator,简称DBA)
DBMS
NULL
INTEGER
REAL
TEXT
BLOB
动态类型
一款轻型的数据库
SQLite
.commit() #提交
.close() #关闭
连接对象:sqlite3.connect('数据文件.db')
.fetchall(): 获取所有结果到列表
.fetchone() 返回单个的数据
.fetchmany(记录数)
游标:cursor = conn.cursor()
修改: UPDATE 表名 SET '修改的对象=修改的值' [WHERE 条件表达式]
删除: DELETE FROM 表名 [WHERE 条件表达式]
查询:SELECT 字段名1,字段名2,… FROM 表名
? :参数传递tuple
:参数名,参数传递字典表
预防sql注入
参数化查询
import sqlite3
SQLite操作
SQL
Python
0 条评论
回复 删除
下一页