python基础知识点
一、基础知识
1、字符串操作
S.find(sub [,start [,end]]) 在索引start和end之间查找字符串sub
S.rfind(sub [,start [,end]]) -> int
S.replace(old, new[, count]) old代表需要替换的字符,new代表将要替代的字符,count代表替换的次数(省略则表示全部替换)
S.split([sep [,maxsplit]]) -> list of strings 以sep为分隔符切片,如果maxsplit有指定值,则仅分割maxsplit个字符串;返回列表
S.rsplit([sep [,maxsplit]]) -> list of strings
S.splitlines(keepends=False) -> list of strings
S.lower() -> string 将所有大写字符转换成小写
S.upper() -> string 将所有小写字符转换成大写
S.count(sub[, start[, end]]) -> int 返回字符串sub在start和end之间出现的次数
S.startswith(prefix[, start[, end]]) -> bool 判断字符串是否是以prefix开头,start和end代表从哪个下标开始,哪个下标结束
S.endswith(suffix[, start[, end]]) -> bool 判断字符串是否以suffix结束,如果是返回True,否则返回False
S.join(iterable) -> string 将列表拼接成字符串
2、列表操作
L.append(object) append添加一个对象,可以是任意类型
L.extend(iterable) extend是依次添加元素,一个一个添加,一般添加的是字符串或者列表
L.insert(index, object) insert是在索引位置添加value
L.count(value) -> integer 计数
L.pop([index]) -> item 如果pop()里面不添加索引 默认删除列表中的最后一个
L.remove(value) 删除元素
L.reverse() 倒置
L.sort(cmp=None, key=None, reverse=False) 默认reverse=False,代表升序(从小到大)排序,当为True时,则降序(从大到小)排列
L.index(value, [start, [stop]]) -> integer 返回查找x第一次出现的索引,i是开始查找索引,j是结束查找索引
3、字典操作
字典的key和value一一对应的,字典是可变的,也是无序的,可迭代的
dict() 字典初始化
dict['dsa'] = 4 字典赋值
del 字典名[key] 删除元素
get(key[, default]) 查看元素
字典的3个方法:keys、values、items
4、元组操作
元组是一种不可变序列
用法:元组的元素取出赋值给不同变量;元组遍历,获得元组对象;元组转列表使用
5、集合操作
集合的特点:是一种可迭代的、无序的、不能包含重复元素的数据结构
set() 去重
add() 添加
update() 和列表中的extend相似,一个个添加
集合名.remove(元素值)
集合名.pop()
二、常用知识
1、Lambda表达式
函数名 = lambda 参数:返回值 lambda表示的是匿名函数,不需要用def来声明
注意事项:
-
1.函数的参数可以有多个,多个参数之间用逗号隔开
-
2.匿名函数不管多复杂.只能写一行.且逻辑结束后直接返回数据
-
3.返回值和正常的函数一样,可以是任意数据类型,返回值的时候只能返回一个不能返回多个
2、基础函数
filter(function or None, sequence) -> list, tuple, or string 对可迭代对象进行过滤,参数function是一个函数,参数iterable是可迭代对象。filter()函数调用时iterable会遍历,它的元素被逐一传入funciton函数
map(function, sequence[, sequence, ...]) -> list 对可迭代对象的元素进行变换
reduce(function, sequence[, initial]) -> value reduce()函数是将多个数据按照指定的算法积累叠加起来;参数funciton是聚合操作函数,iterable是可迭代对象,initializer是初始值,可以省略
3、基础模块
math
- math.ceil(a): 用来返回≥a的最小整数
- math.floor(a):用来返回≤a的最大整数
round(a [,b])
- 如果没有参数b,只有a,round()作用是四舍五入
- 如果有参数b,round()作用是对a保留b位小数
random
- random.random():返回在范围大于或等于0.0,且小于1.0内的随机浮点数
- random.randrange(stop): 返回在范围大于或等于0,且小于stop内,步长为1的随机整数
- random.randrange(start, stop[, step]): 返回在范围大于或等于start,且小于stop内,步长为step的随机整数
- random.randint(a, b): 返回在范围大于或等于a,且小于或等于b之间的随机整数
datetime
- datetime.today(): 返回当前本地日期和时间
- datetime.now(tz=None): 返回本地当前的日期和时间,如果参数tz=None或未指定,则等同于today()
- datetime.utcnow(): 返回当前UTC日期和时间
- datetime.fromtimestamp(timestamp, tz=None): 返回与UNIX时间戳对应的本地日期和时间
- Datetime.utcfromtimestamp(timestamp): 返回与UNIX时间戳对应的UTC日期和时
date类
- date.today(): 返回当前本地日期
- date.fromtimestamp(timestamp): 返回与UNIX时间戳对应的本地日期
日期时间格式化
- str转换为datetime
很多时候,用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。转换方法是通过datetime.strptime()实现,需要一个日期和时间的格式化字符串:datetime.strptime('2018-4-1 00:00', '%Y-%m-%d %H:%M')
- datetime转换为str
如果已经有了datetime对象,要把它格式化为字符串显示给用户,就需要转换为str,转换方法是通过strftime()实现的,同样需要一个日期和时间的格式化字符串:datetime.now().strftime('%a, %b %d %H:%M')
json模块
- dump 将编码结果保存到文件对象或流中
- load 从网络或者磁盘中读取json数据,对其中的json数据解码,返回python数据
- dumps 将编码的结果以字符串形式返回
- loads 对其中的json数据进行解码,返回python数据
open函数
1.file参数
file参数是要打开的文件,可以是字符串或整数。如果file是字符串表示文件名,文件名可以是相对当前目录的路径,也可以是绝对路径;如果file是整数表示文件描述符,文件描述符指向一个已经打开的文件
2.mode参数
设置打开模式,二进制文件设置rb,wb,xb,ab,如果是文本文件,则设置r,w,x,a
- r:只读模式打开文件(默认)
- w:写入模式打开文件,会覆盖已经存在的文件
- x:独占创建模式,文件不存在时创建并以写入模式打开,如果文件已存在则抛出异常
- a:追加模式,如果文件存在,则写入时内容追加到文件末尾
- b:二进制模式
- +:更新模式
- t:文本模式(默认)
文本文件读写
- read(size=-1):从文件中读取字符串,size限制最多读取的字符数,
size=-1
时没有限制,读取全部内容 - redline(size=-1):读取到换行符或文件尾并返回单行字符串,如果已经到文件尾,则返回一个空字符串,size是限制读取的字符数,size=-1时没有限制
- readlines(hint=-1):读取文件数据到一个字符串列表中,每一个行数据是列表的一个元素,
hint
是限制读取的行数,hint=-1时没有限制 - write(s):将字符串s写入文件,并返回写入的字符数
- writelines(lines):向文件中写入一个列表,不添加行分隔符,因此通常为每一行末尾提供行分隔符
- flush():刷新写缓冲区,数据会写入到文件中
二进制文件读写
- read(size=-1):从文件中读取字节,size限制最多读取的字节数,size=-1时没有限制,读取全部字节
- redline(size=-1):从文件中读取并返回一行,size是限制读取的字节数,size=-1时没有限制
- readlines(hint=-1):读取文件数据到一个列表中,每一个行数据是列表的一个元素,hint是限制读取的行数,hint=-1时没有限制
- write(s):写入b字节,并返回写入的字符数
- writelines(lines):向文件中写入一个列表,不添加行分隔符,因此通常为每一行末尾提供行分隔符
- flush():刷新写缓冲区,数据会写入到文件中
os模块
Python对文件的操作是通过文件对象实现的,如删除文件、修改文件名,创建目录,删除目录和遍历目录,可以通过Python的os模块实现
- os.rename(src, dst):修改文件名,
src
是源文件,dst
是目标文件,它们都可以是相对路径或者绝对路径 - os.remove(path):删除path所指的文件,如果path是目录,则会引发OSError
- os.mkdir(path):创建path所指的目录,如果目录已存在,则会引发FileExistsError
- os.rmdir(path):删除path所指的目录,如果目录非空,则会引发OSError
- os.walk(top):遍历top所指的目录树,自顶向下遍历目录树,返回值是一个三元组(目录路径,目录名列表,文件名列表)
- os.listdir(dir):列出指定目录中的文件和子目录
常用的属性有以下两种 - os.curdir属性:获得当前目录
- os.pardir属性:获得当前父目录
os.path模块
- os.path.abspath(path):返回path的
绝对路径
- os.path.basename(path):返回路径的基础名部分,如果path是指向一个文件,则返回文件名,如果path指向的是一个目录,则返回最后目录名
- os.path.dirname(path):返回path路径中目录部分
- os.path.exists(path):判断path文件是否存在
- os.path.isfile(path):如果path是文件,则返回True
- os.path.isdir(path):如果path是目录,则返回True
- os.path.getatime(path):返回最后一次的访问时间,返回值是一个
UNIX
的时间戳,如果文件不存在或无法访问,则引发OSError
- os.path.getmtime(path):返回最后修改时间,返回值是一个UNIX的时间戳,如果文件不存在或无法访问,则引发OSError
- os.path.getctime(path):返回创建时间,返回值是一个UNIX时间戳,如果文件不存在或无法访问,则引发OSError
- os.path.getsize(path):返回文件大小,以
字节
为单位,如果文件不存在或无法访问,则引发OSError
re模块
参阅pythonav资源分享
4、深拷贝和浅拷贝
不管对于浅拷贝、还是深拷贝,针对不可变对象str、int、tuple(有点特殊)、boolean,它的内存地址是不变的,拷贝的仅仅是值
浅拷贝只拷贝可变对象的第一层,如果可变对象中还有可变的对象,那么第二层拷贝不到,拷贝不到就是说,第二层的内存地址是共用的,都是指向同一片内存地址
深拷贝对于可变的对象,全部拷贝下来,全部都开辟一片新的内存地址
5、垃圾回收
参阅 pythonav资源分享
6、多进程和多线程
参阅 python进程、线程、协程 - 张岩林 - 博客园
7、闭包
闭包就是内层函数, 对外层函数(非全局)的变量的引用. 叫闭包
作用:python规定. 如果你在内部函数中访问了外层函数中的变量. 那么这个变量将不会消亡. 将会常驻在内存中. 也就是说. 使用闭包, 可以保证外层函数中的变量在内存中常驻. 好处就是就是让一个变量能够常驻内存,供后面的程序使用
8、迭代器
Iterable: 可迭代对象. 内部包含__iter__()函数
Iterator: 迭代器. 内部包含__iter__() 同时包含__next__().
迭代器的特点:
1. 节省内存.
2. 惰性机制
3. 不能反复, 只能向下执行.
我们可以把要迭代的内容当成子弹. 然后呢. 获取到迭代器__iter__(), 就把子弹都装在弹夹中. 然后发射就是__next__()把每一个子弹(元素)打出来. 也就是说, for循环的时候.一开始的 时候是__iter__()来获取迭代器. 后面每次获取元素都是通过next()来完成的. 当程序遇到 StopIteration将结束循环.
9、生成器
在python中有以下几种方式来获取生成器
1.通过生成器函数
2.通过各种推到式来实现生成器
将函数中的return换成yield就是生成器:yield和return的效果是一样的,但是还是有点区别
yield是分段来执行一个函数,yield可以出现多次
return是直接停止这个函数,return可以出现多次但是只会执行到第一个就结束了
10、推导式
列表推导式:[结果 for 变量 in 可迭代对象 if 条件]
生成器推导式:(结果 for 变量 in 可迭代对象 if 条件)
1.列表推导式比较耗内存,一次性加载.生成器表达式几乎不占用内存.使用的时候才分配和使用内存
2.得到的值不一样,列表推导式得到的是一个列表.生成器表达式获取的是一个生成器
字典推导式:dic = {lst1[i]:lst2[i] for i in range(len(lst1))}
集合推导式:集合推导式可以帮我们直接生成一个集合,集合的特点;无序,不重复 所以集合推导式自带去重功能
11、装饰器
@装饰器函数 == 重新定义被装饰函数=装饰器函数(被装饰函数)