python学习框架
2019-04-29 18:24:07 0 举报
AI智能生成
python大纲 持续补充中 配置笔记本使用
作者其他创作
大纲/内容
python基础
计算机基础
硬件
cpu、硬盘、内存、外设
软件
os,解释器,应用程序
计算机语言
解释器+ 语法
pycharm的安装和使用
环境变量PATH
py2与py3的区别
默认解释器
#! -*- coding:utf-8-*-
py2:ascii
py3:utf-8
输入输出格式
py2:raw_input();py3:input()
py2:print '';py3:print()
int和long
py2:同时有int 和long两种整型
py3:只有int
from _ _future_ _ import division
xrange/range
py2: 同时存在xrang和range
py3:只有range(本质是xrange)
xrang在循环取值时才会生成数据
input()注意事项
接收的全是字符串
非数字不可转int
变量命名规范
数字,字母和下划线
数字不可打头
不能使用关键字
推荐:见名知意和下划线分割多个单词 类是所有单词首字母大写
编码
ASCII
8bits编码
英文字母数字和特殊字符
UNICODE
32bits编码,至今使用21bits
耗费存储空间
全球通用,通常用于计算机内存中的处理数据
UTF-8
对unicode进行压缩和优化
保留ASCII(8bits),欧洲:2bytes,中文:3bytes
GB2312
GBK
\x
基本语法
if条件语句
if 条件判断
if 条件判断: else
if 条件判断1: elif 条件判断2: elif 条件判断3: else:
while 条件语句
while 1:
while 条件判断: else
for循环
for i in val:
in 与 not in
not,and,or
条件判断
用于取值
range(起始位置,终止位置,step)
python相关工具
pycharm
快速注释
设置断点
git的安装和使用
找到目的路径
git config --global user.name "henry"
git config --global user.email "邮件"
git remote add henry url
git init
git add '*'
git commit -m "标记“
git push -u henry master/git push origin master
git pull origin master
git status
内存相关
小数据池
a = 10086
id(a)
is & ==
==判断值
is判断内存地址
Cache小数据池
int型-5 — 256之间会被缓存
str:空和单个字符默认缓存;只包含字母、数字、下划线,也缓存; 乘数>1时,str只包含Num、ALp、_时缓存(最终长度不能超过20)
str:手动指定缓存
bool
深浅copy
结论
浅copy只拷贝第一层可变类型变量的地址
deepcopy拷贝所有可变类型数据的地址; tuple里嵌套可变类型是,tuple的地址也会copy
只要copy就需要开辟一块新的内存空间
格式
import copy
v2 = copy.copy(v1)
v2 = copy.deepcopy(v1)
查看内存地址
id(v)
数据类型 7 + 1
查看类型
type(v)
none
没有任何操作,为空
int
只有字符串可以转换为int
bool
0,“”,[], (), {}, set(), none
str 5 + 5 + 5
5
s.upper()
s.isdigit()
s.strip("ab")
replace('a' , 'b', 2)
split('a', 3)
5
s.startswith('a')
"%s***%s" % (a, b,)
{0}***{1}***.format(a, b)
s.encode('utf-8')
'_'.join(s)
name='alex' f'我是{name}'
5
切片&索引&步长
索引默认从0开始
s[初始位置:终止位置:step]
for 循环
for i in s:
len(s)
list[] 5 + 3 + 7
5
li.append(a)
li.insert(0, b)
li.remove(a)
li.pop(index) 有返回值
li.clear()
3
li.extend('s') 3
li.reverse()
li.sort(reverse = True)
7
索引
切片
step
for 循环
len(li)
修改
del li[2]
tuple ()
索引
切片
step
for 循环
len(i)
dict {} 6 +3 +5
6
info.keys()
info.values()
info.items()
info.get('a', 666)
info.pop('a')
info.update(info1)
3
dic.setdefault()
dict.popitem()
dict.clear()
5
len(info)
索引取值
for items in info:
info[key] = val
del info[name]
set () 5 + 4 +2
5
se.add('a')
se.discard('a')
se.update(s)
se.pop()
se.clear()
4
v1.intersection(v2)
v1.union(v2)
v1.difference(v2)
v1.symmetric_difference(v2)
2
len(v1)
for 循环
文件操作
open
with open('file', mode='r/...', encoding='utf-8') as f:
open('filename', mode='r/w/a' ,encoding='utf-8')
file_obj.wirte('a')
file_obj.read()
file_obj.seek(3)
file_obj.close()
f.readlines
f.flush()
f.tell()
读取一行
f.readline()
mode
r
只读
w
只写
a
只追加
r+
读完之后,需要移动光标所在位置,在进行写操作
w+
写完之后才能读取
需要移动光标位置,才能读取
a+
可以读取
写的时候只能是追加/写完不移光标读不到,光标在末尾
函数
函数基础
三元运算
a = 10 if 条件判断 else 11
两种参数
形参和实参
返回值
可以为任何类型数据
函数四种方式
无形参,无返回值
有形参,无返回值
无形参,有返回值
有形参,有返回值
变量作用域&嵌套
函数传参方式
位置传参
关键字传参
函数作为参数传递
函数定义
省略参数
默认参数
*args/**kwargs
作用域
全局变量
py文件是一个全局作用域
函数是一个局部作用域
nonlocal/ global
局部变量
函数进阶
赋值
注意func和func()的区别
传参
作为其他函数的参数进行传递
类似函数嵌套
作为返回值
return后可以加函数名或函数的返回值
函数一旦定义,只要加载,就是不可变,可hash
lambda表达式
lambda x:x+100
x的4种使用情况
内置函数 30
强制转换 7
int/bool/str/list/tuple/dict/set
输入输出 2
其他 5
type,range,id,len,open
数学 7
abs/max/min/float/round(四舍五入)/divmod(返回除数和余数)/sum
进制转换 3+1
bin/oct/int/hex
int(str, base=2/8/16)
编码相关 2
chr
ord
map/filter/reduce/zip 4
循环一个变量,然后进行操作
functools.reduce(lambda x, y: x*y, v)
zip:打包两个可迭代对象为一个元组
函数闭包
函数创建一块区域(内部变量供自己使用),为以后执行提供数据
函数内部数据不会混乱
执行完毕+内部数据不被其他程序使用会被销毁
应用:装饰器,SQLAlchemy源码
由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境
递归
效率较低,不建议使用
装饰器、迭代器&生成器
装饰器
在不改变原函数的基础上,在函数执行之前、之后可以执行操作
inner函数最好加上*args/ **kwargs
带参数的装饰器,多嵌套一层
迭代器
甄别
具有__next__()方法
迭代器获取每一个元素:v.next
直到报错:StopIteration,表示迭代终止
for循环的内部,首先把数据转化为iter,反复执行iter._\_next__(),取完不报错
可迭代对象
生成器
甄别
dir(v):查看v中有哪些方法
函数中如果存在yield,则该函数为生成器函数,调用生成器函数会返回一个生成器
被for循环时,生成器内部代码才会执行,每次循环都会获取yield的返回值
函数内部的yield函数永远执行不到,也是生成器
一种**特殊的迭代器**,也是一个可迭代对象
推导式
list
[i for i in 'henry']
[i for i in 'henry' if i in 'hen']
[i for i in 可迭代对象 if 条件]
dict
{i for i in 可迭代对象 if 条件}
set
{ 'k' + str(i): i for i in 可迭代对象 if 条件}
模块
模块的导入
import 模块
from 模块1.模块2 import xxx (根目录文件不支持from导入)
hashlib/getpass
hashlib.md5('54sh5yz'.encode('utf-8'))
data='xxx'/obj.update(date.encode('utf8'))
obj.hexdigest()
getpass.getpass('tips')
time&datetime
time
time.time()
time.sleep('t')
time.timezone
datetime.now()
datetime.utcnow()
tz = timezone(timedelta(hours=7))
datetime.now(tz)
datetime.now().strftime('%Y-%m-%d')
datetime.strptime('2019-04-19', '%Y-%m-%d')
val +/- timedelta(days=40)
datetime.fromtimestamp(time.time(), tz)
datetime.now().timestamp()
os
os.path.exists('file_name')
os.stat('file_name').st_size
os.path.abspath('file_name')
os.path.dirname('file_name')
os.path.join('path1', 'path2')
os.path.listdir('file_name')
os.walk('file_name')
os.mkdir() / os.makedirs()
os.rename('new_file_name','file_name')
os.remove('file_name')
sys
sys.path
sys.argv
sys.getrefcount('v_name')
sys.getrecursionlimit/sys.setrecursionlimit
sys.stdout.write('content')
其他
copy
copy.copy()
copy.deepcopy()
random
randint(num1, num2)
shutil
shutil.rmtree(r'directory')
requests
res = requests.get(url)
res得到的结果是text格式的文本
xlrd
异常处理
主动触发异常
自定义异常
面向对象
封装
数据封装__init__
函数封装
继承
父类/基类--子类/派生类
self由谁创建
继承顺序
py3深度优先
新式类,继承object
py2广度优先
经典类
多态
进阶:类的成员和变量
类
类变量
绑定方法
至少有一个self参数
类方法@classmethod
至少有cls参数
静态方法@staticmethod
参数无限制
属性@property
只有self参数
实例/对象
实例变量
成员修饰符
公有,所有地方都访问到.
私有,只有自己可以访问到. 以__开头(_Foo__name可以强行访问到)
进阶:类的特殊成员
__init__
__new__
注:传入cls
__new__
__call__
__setitem__
__getitem__
__delitem__
__str__
__dict__
上下文__enter__ __exit__
__add__
内置函数补充
type
issubclass
isinstance
super
面向对象高级
代码的嵌套运行(类中嵌套类,嵌套类的第一层会执行)
类实现可迭代对象
类中有__iter__方法,返回迭代器或者生成器
约束, 父类方法通过异常实现:raise NotImplementedError
反射 一切皆对象
getattr(obj,'name')
setattr(obj,'k1',123)
hasattr(obj,method_name)
模块 importlib 导入 然后通过反射找到对应方法
收藏
0 条评论
下一页