Python知识
2017-11-20 12:39:33 0 举报
AI智能生成
Python
作者其他创作
大纲/内容
基础数据类型
int
不是可迭代对象
bit_length():查看将十进制的数字转换成二进制时,最少使用的位数
str
字符串不能修改,可以增加,可以查
可用for循环来查看字符串中的各个元素
str.strip():去掉字符串左右两边的空格
str.lstrip():去掉字符串左边的空格
str.rstrip():去掉字符串右边的空格
切片
首字母大写
str.capitalize()
大小写翻转
str.swapcase()
title:将每个单词的首字母变成大写
单词的区分以空格为标准
居中:center
str.center(需要填补的个数,“用于填补的符号”)
数字符串中元素出现的个数
将\\t前面的补全expandtabs
str.expandtabs(),默认将一个tab键变成8个空格,
如果tab前面的字符长度不足8个,则补全8个
如果tab键前面的字符长度超过8个但不足16个,则补全16个,以此类推每次补全8个
startswith
判断是否以......开头
str.startswith('判断开头的字符')
endswith
判断是否以....结尾
str.endswith('判断结尾的字符')
index
通过字符串元素来查找索引,如果没有找到的话就直接报错
format:格式化输出
****is系列
str.isalmun():判断字符串是否是全部由数字或字母组成
str.isalpha():判断字符串是否是全部由字母组成
str.isdigit():判断字符串是否是全部由数字组成
复数
虚部和实部都是float型,虚部的j不区分大小写
不能比较大小
bool
True 表示真,用int则表示为除零以外的数都是真,str中除空字符之外的都是真
False 表示假,int中0表示假,str中空字符表示假
元组tupe
被称为只读列表,即数据可以被查询,但不能被修改,字符串的切片操作同样适用于元组
列表list
增
按照索引去增加insert
append
在列表的最后添加元素
extend
迭代的将元素添加到列表中li.extend('awq')
删
pop
按照位置去删list.pop(元素索引)
del
按照位置删除元素del list[元素索引]
可以切片删除del list[start:end]依然是顾头不顾腚
remove
按照元素去删除 list.remove(元素)
clear
改
指定想要修改的元素的下标,直接重新赋值:li[元素下标]=新的元素
查
直接用for循环去遍历列表中的各个元素
用切片是方式来查找列表中的元素
其他操作
count(数)
统计某个元素在列表中出现的次数:list.count('待统计的元素')
从列表中找出某个值第一个匹配项是索引位置:list.index('列表中的某个元素')
sort:在原位置对列表中的元素进行排序:list.sort()
reverse将列表中的元素进行反向存放:list.reverse()
dict
setdefault
在字典中添加键值对,如果只有键那对应的值是None,如果原字典中存在设置的键值对,则他不会更改或覆盖
根据key删除键值对,并返回对应的值即可,如果没有key则返回默认的返回值
popitem
随机删除字典中的某个键值对,将删除的键值对以元组的形式返回
清空字典,但是字典仍然是存在的
update
将dic所有的键值对覆盖添加(相同的覆盖,没有的添加)到dic1中:dic1.update(dic)
直接按键查询值
print(dic['key'])
get
dic.item():同时输出字典的键和值,是可迭代的
dic.keys():查看字典的键
dic.value():查看字典的值
字典的循环
用for循环来遍历字典中的每一项
for循环
enumerate枚举
对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
range
指定范围,生成指定数字:range(数字范围)
文件操作
文件对象
用来访问
文件只是【连续的字节序列】
内建函数
open()
内涵
提供了\t初始化\t输入/输出操作\t的通用接口
返回了【文件对象】\tor\t引发一个错误
参数
access_mode =
r/w/a\t读/写/追加
读写
r+
文件指针在文件【开头】
w+
文件
已存在
覆盖
不存在
创建
a+
文件指针在文件【结尾】
后加b表示\t二进制模式
返回
file对象
file()
同open()
内建方法
输入
file.
read(size)
size为字节数
无参数时\t一次性读取
readline()/Readlines()
xreadlines()
每次读取一块
减少内存占用
输出
write()
writelines()
文件定位
seek()\t移动文件指针
tell()\t文件指针\t到当前位置
杂项操作
close()
没有【显式】关闭文件可能会丢失【缓冲区数据】
flush()把内部缓冲区数据\t立刻写入到文件
truncate()
截取到
当前文件指针位置
or 给定size
若刚打开即调用函数\t文件被删除(从0开始截取)
内建属性
closed\tTrue/False
encoding
mode\t访问模式
name
文件迭代
自身作为【迭代器】
for eachline in open(\"file.txt\
file.next( )
vs
更高效
更简洁
老方法
f.readlines()/ReadLine()\t更占内存
标准文件对象
标准输入\tstdin
键盘
raw_input/ input
标准输出\tstdout
到显示器的缓冲输出
print\t输出到【sys.stdout】
标准错误\tstderr
到屏幕的非缓冲输出
分隔符
行分隔符
POSIX(Unix、Mac OS X)\t\
DOS/Windows\t\t\\
旧版MacOS\t\t\
路径分隔符
POSIX(Unix、Mac OS X)\t\\
DOS/Windows\t\t/
旧版MacOS\t\t:
import os
辅助跨平台开发
属性\tos
linesep
行分隔符\t\"\\\"
sep
路径名分隔符
\"\\\\\"
pathsep
\":\"
curdir
当前工作目录 字符串表示:
\".\"
pardir
父目录 字符串表示:
\"..\"
函数
定义
通过def来定义
后面要有括号
函数名在定义的时候,不能是内部变量名,命名规则和变量的命名规则一样
调用
函数的调用,需要在函数后面加(),不加()只是将函数对象赋值给其他变量
形参
静态参数
位置参数
默认参数
动态参数
*args
可以将以位置参数形式传入的参数合成一个元素,传递到函数中
**kwargs
可以将以默认参数形式传入的参数合成一个字段,传递到函数中
实参
与形参的位置、顺序相对应
参数的名字与形参相对应
将一个可迭代对象中的元素,以位置参数的形式传递到函数中
将一个字典以默认参数的形式传递到函数中
返回值
函数的返回值通过return语句来实现
如果没有return语句,默认返回None
函数在执行到return的时候会停止
return多个值的时候默认会得到元组
命名空间
内置变量
全局变量
所有的函数都能访问,但是不能修改
如果函数内部想修改,需要加上global
局部变量
中外部的函数无法使用内部的变量,局部变量只能在自己的函数中使用
模块
collections模块
namedtuple
生成可以使用名字来访问元素内容的tuple
deque
双端队列,可以快速的从另外一侧追加和推出对象
是为了高效实现插入和删除的双向列表,适用于队列和栈
OrderedDict
有序字典
key会按照插入的顺序排列的,不是key本身排序
defaultdict
带有默认值的字典
使用dict时,如果引用的key不存在,就会抛出KeyError。如果希望的key不存在时,返回一个默认值,N/A
Counter
计数器,主要用来计数
目的是用来计算跟踪值出现的次数
time模块
时间戳
表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,运行type(time.time())时,返回的是float型
格式化的时间字符串(Format String)
元组(struct_time)
共有9个元素(年,月,日,时,分,秒,一年之中的第几周,一年之中的第几天等)
几种格式之间的转换
时间戳-->结构化时间
time.gmtime(时间戳)
time.localtime(时间戳)
结构化时间-->时间戳
time.mktime(结构化时间)
结构化时间--->字符串时间
字符串时间--->结构化时间
time.strptime(时间字符串,字符串对应格式)
结构化时间--->%a%b%d %H:%M:%S %Y串
time.asctime(结构化时间)
%a%b%d %H:%M:%S %Y串 --->结构化时间
time.ctime(时间戳)
random模块
random.random() #得到0—1之间的随机小数
random.choice() 在括号中选取一个元素
random.shuffle() 打乱括号中元素的顺序
os模块
是与操作系统交互的一个接口
os.stat(path/filename)
st_mode:inode #保护模式
st_ino:inode #节点号
st_dev:inode #驻留的设备
st_nlink:inode 的链接数
st_size:普通文件以字节为单位的大小;包含等待某些特殊文件的数据
st_atime:上次访问的时间
st_mtime:最后一次修改的时间
st_ctime:有操作系统报告的'ctime'。在某些系统上(如Unix)是最新的元数据更改 时间,中其他系统上(Windows)是创建时间
st_gid:所有者的组ID
st_uid:所有者的用户ID
sys模块
sys.argv 命令行参数List,第一个元素是程序本身的路径
sys.version 获取python解释程序的版本信息
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
re模块
在正则表达式中用于转义
序列化模块
将原本的字典、列表等内容转换成一个字符串的过程叫做序列化
目的
以某种存储形式使自定义对象持久化
将对象从一个地方传递到另一个地方
使程序更具维护性
json模块
dump
在文件中,dump方法接收一个文件句柄,直接将python数据类型转换成json字符串写入文件
dumps
序列化:将python 的数据类型转换成字符串
loads
反序列化:将一个字符串格式的数据转换成python的数据类型
load
load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
pickle
用于python特有的类型和python的数据类型间进行转换,可以把python中任意的数据类型序列化
shelve
不支持多个应用同一时间往同一个DB进行写操作。所以当知道应用只进行读操作时,可以让shelve通过只读方式打开DB
python知识
面向对象
基本概念
oop
object-oriented Programmarming
核心思想
相近对象(object),归类为(Class)
设计思想
抽象出class
根据class创建instance
三大特点
数据封装
继承
多态
主要目的
提高程序的重复使用性
面向对象编程
分类
更符合人类思维习惯
特点
一组【对象】的集合
每个【对象】都可以\t接收/处理\t其他【对象】发过来的消息
面向过程
依次执行语句
更多是机器思维
一系列命令的集合\t即\t一组函数的顺序执行
把大块函数切割成小块函数\t降低系统复杂度
类变量vs实例变量
类变量
在【类】中且在【函数体】之外
在这个类的所有【实例】之间共享
通常不作为【实例变量】使用
访问
内部类 or 外部类
ClassName.classVar
实例变量
定义在【方法】中
只作用于\t当前实例的类
数据成员
类变量&实例变量 用于处理 类及其实例对象 相关的数据
方法
类中定义的【函数】
结构
基本结构
class
创建【类】
class ClassName(bases): \"\"\" class document string \"\"\" class_suite
ClassName
【类名】通常是大写开头的单词
bases
一个或多个\t用于继承的【父类】的集合
object\t本身\t所有类最终都会继承的类
\"\"\" class document string \"\"\"
ClassName.__doc__
类的文档字符串
class_suite
组成:
类成员
类方法
数据属性
类下有
属性attribute
类下定义的变量
命名\t名词
方法method
类下定义的函数
实现了数据封装
调用时
直接操作\t对象内部的数据
无需知道\t方法内部的实现细节
命名\t动词+对象
第一个参数
self\t必须有!
为了方便引用\t对象自身性质
e.g:
object
创建实例对象
summer = Brid()\t#summer是个对象\t且属于bird
属性的引用
summer.have_feather
方法的引用
类属性
数据属性\t可以添加,删除,修改
子主题 2
内置(特殊)类属性\tClassName.
__name__
类名:
直接运行
__main__
作为导入模块
导入模块名
__doc__
__bases__
所有【父类】构成的元组
__dict__
属性
__module__
类定义所在的模块
__class__
对应类
特殊方法 称为 类的初始化方法/构造函数
用于 初始化 创建【实例对象】时
会自动调用
强制绑定属性
self
类的实例
定义【类的方法】时
永远的【第一个】参数
表示【创建的实例】本身
把各种属性\t绑定到self
class Employee: emCount = 0
emp1 = Employee(\"Zara\
继承与多态
子类→父类/基类/超类
括号里 类定义时
要继承\t父类名字
说明没有父类\tobject
享有了[父类的属性]\t通过[继承]\t代码的重用
基类的__init__()
不会被自动调用
派生类的__init__()专门调用\t需要在
调用基类的方法
加上基类的\t[类名前缀]
带上self参数变量
调用的方法
先在[本类]中查找
才去[基类]中找\t找不到
多重继承
裂了一个以上的类\t继承元组中
定义一种[数据类型]\t等同于\t定义一个class
在继承关系中
一个实例的[数据类型]
是某个[子类]
or[父类]
对于一个变量
无需确切知道子类型\t只需知道父类型
调用父类方法时
作用对象由运行时
该对象的确切类型决定
[开闭]原则
对[扩展]开放
父类的子类\t允许新增
对[修改]原则
依赖父类的函数\t不需要修改
BIF
布尔函数
sub是sup的子类/子孙类
一个类是其自身的子类\tp.s.
obj是[类Class(或其子类)]的一个实例\tTrue
可以是多个类的[元组]\tClass
*attr()系列
各种对象\t使用范围
系列BIF
设置一个属性
不存在测新建
获得一个对象的所有属性和方法 dir()
获取相应【父类】 super()
属性-值 字典 vars()
对象性质
区分
类的属性
会共享这些属性 所有属于该类的对象
对象的性质
该对象的特别信息
__init__ 定义方法
self.atttribute 赋值给
self继而传递给各个方法
self.attribute 通过引用
对象的性质 查询或修改
访问限制
私有变量
变量名以 \"_\" 开头
让内部属性不被外部访问
如果
需要获取内部属性
增加方法
def get_name(self): return self._name
允许外部代码修改
增加[方法]
可以对参数做检查
避免传入无效参数
e.g.
p.s:
可以访问\t特殊变量\t__xxx__
不能访问\t私有变量\t__x
可以访问\t不要随意访问\t_x
总结
类
用来描述
具有相同
属性&方法
的[对象]的集合
对象
通过[类]定义的数据结构\t[实例]
包括
两个[数据成员]
实例化
创建一个类的[实例]
类的具体对象\t即
方法重写
覆盖(override)\t又称
如果从[父类]继承的[方法]
不能满足[子类]的需求
可以对其进行改写
一个[派生类]继承[基类]的属性&方法
derived class
base class
允许把一个[派生类对象]
作为一个[基类对象]对待
p.s.
运算符
定义在[类内部]的[特殊方法]\t本质上是
__add__()\te.g.
修改对象运算\t根据目的\t可自定义运算符
网络编程
线程、进程、协程、IO多路复用
其他
内置函数
与基础数据类型相关
和数字相关
数据类型
flaot
complex
实部
虚部
其中虚部的j不区分大小写
进制转换
bin
二进制,简写B
oct
八进制,简写O
十进制
简写D
hex
数字运算
abs
计算绝对值
divmond
返回(除数、余数)
round
小数精确
round(3.1415926)
pow
幂运算
sum
求和
min
计算最小值
max
计算最大值
和数据结构相关
序列
数据集合
相关内置函数
迭代器/生成器相关
range(100).__iter__()
iter(range(100))
next
inter
字符串类型代码的执行
eval
可将引号去除,有返回值
exec
可将引号去除,没有返回值,只会输出None
compile
将字符串类型的代码进行编译,代码对象可以通过exec语句来执行或者eval()进行求值
输入输出
input
print
sep:默认为空格来分隔输出各项,可以人为设定
与内存相关
hsah
相同内容的哈希结果是相同的
可用于1、数据的存储和查找;2、模块hashlib
判断一个数据类型是否可以hash,在一个程序执行过程中,对同一个值的hash结果总是不变的,多次执行,对同一个值的hash结果可能改变
id
可以快速的找到某数据的存储地址
与文件操作有关
open
打开模式:r、w、a、rb、wb、ab
编码方式:utf-8
与模块相关
import
帮助
help
与调用有关系
callable
可被调用的,返回True或者False
查看内置属性
dir
判断某个数据类型中有什么用法
异常处理
概述
错误
语法错误
逻辑错误
异常
由于程序【错误】\t在【正常控制流】以外采取行动
两个阶段
检测到【错误】\t\t解释器触发【异常】
调用不同的【操作】\t即【处理异常】
常见类型
BaseException
所有异常的基类
KeyboardInterrupt\t用户中断执行
systemexit\t\t解释器请求退出
Exception
常规错误
NameError\t访问未声明变量
ZeroDivisionError\t除零错误
SyntaxError\t解释器语法错误
IndexError\t索引超出序列范围
KeyError\t访问不存在的key
IOError\t\t输入/输出错误
AttributeError\t访问未知的对象属性
...
所有的错误类型\t\t都继承自\tBaseException
try: ...except exception1: ...except exception2: ...except: ...else: ...finally: ...
try
需要监测的代码
若有【异常】发生
直到找到归属\t执行语句
p.s.\t语句块中【异常发生点】后的剩余语句\t永远不会到达
except
语法
几种用法
捕获多个异常
except Exc1 ... ExcN as e:
(放入一个元组)
捕获所有异常
except\t空except子句
except exception
except BaseException
捕获后忽略错误\t\texcept exception : pass
else
可选
无异常发生\t执行语句
finally
无论是否有异常发生\t最后都要执行语句
流程
try → 异常 → except → finally
try → 无异常 → else → finally
try-except
捕捉异常
try-finally
用于\t维持一致的行为
e.g.\t关闭文件
p.s
如果无法将【异常】交给合适的【处理器】
except后的错误类型\t不符合
同时没有\t不加参数的except
【异常】将继续\t向上层抛出
直到\t被捕捉or造成主程序报错
except + 错误类型\t\t捕获\t该错误类型及所有子类
不要\t处理并忽略所有错误!\t可以
捕获【特定异常】并忽略
捕获【所有异常】并处理
补充
with\t上下文管理
语法:with context_expr[as var]: with_suite
原理:
执行完\twith内的代码块
恢复到 执行前的状态
触发异常
raise 不带参数\t原样抛出 当前错误
sys.exc_info( )\t获取异常信息
调试
打印
可能有问题的变量
assert
断言
必须为真的判定
为假
则发生异常
使用
表达式
logging
允许配置【记录信息】级别 logging.info( )
代码
import logginglogging.basicConfig( level = logging.INFO )
级别
debug、info、warning、error
pdb
让程序以【单步方式】运行
程式
以参数 -m pdb启动
输入命令
单步执行代码\t\tn
查看变量\t\tp
退出程序\t结束调试\tq
pdb.set_trace( )
import\tpdb
设置一个断点
在可能出错的地方
放一个pdb.set_trace( )
命令
查看变量\tp
继续运行\tc
ide
基础知识
计算机语言
类型
编译性语言
C语音/C++
p.s\tJava既有编译又有解释
解释型语言
Python、ruby、PHP
脚本语言
解释型语言\t需要【解释器】
一般都是以[文本形式]存在\t程序代码\t即\t最终执行文件
动态语言\t无类型
Python、Perl、JavaScript
高级语言(人写) ↓需要需要翻译为机器语言(计算机执行):\t翻译方式
编译\t程序执行之前需要\t先编译
eg:\texe文件(编译的结果)
以后运行\t不需要重新编译
执行效率高
解释
不需要【编译】
语句执行时\t才翻译
需要【解释器】
每次执行\t都需要逐句翻译
执行效率低下
python语言特点
解释型脚本语言\t内建\t高级的数据结构
面向对象的语言\t便于\t数据和逻辑\t相分离
动态语言\t\t变量本身
类型不固定
可以随意转换
不用考虑\t\t内存问题
基本规则
#\t注释
\\t行分隔符
\\
继续上一行
跨行特例
闭合操作符\t各种符号\t[ ]、{ }、( )
三引号\t\t\"\"\"\t...\t\"\"\"常用于【多行注释】
分号;\t在同一行\t\t连接多个语句
冒号:\t分开代码块(组)\t\t头&体
缩进块\t语句【代码块】\t用【缩进深度】区分
最好为【四个空格】
空行\t用于分隔
每一个脚本文件
均为【模块】
以【磁盘文件】形式存在
若模块过大\t考虑\t拆解代码\t另建模块
变量赋值
赋值符\t\t=
增量赋值\t\t+=
多重赋值\t\tx = y = z = 1
\"多元\"赋值
运行python3
两种模式
脚本式编程
一次性执行\t\t源代码脚本
命令行模式
交互式编程
逐行输入\t\t\t再执行
运行脚本
命令行模式/显式调用\t\tPython *.py
Linux下\t可执行脚本
脚本首行添加
#!/use/bin/env python
或\t#!/use/local/bin/python\t Python路径
命令行赋予权限\t\tchmod 755 *.py
运行脚本\t\t*.py
ipython\t\t%run *.py
0 条评论
回复 删除
下一页