基础篇:
(基础知识+实例+项目开发)
1、迭代器原理及使用
作用:是访问集合元素的一种方式
优点:迭代器只往前不后退,可以省内存
特点:访问者只需通过next()不断获取下一个内容
优点:迭代器只往前不后退,可以省内存
特点:访问者只需通过next()不断获取下一个内容
例:
name = ['alex','jack','list'] #声明一个元组
names = iter(['name','jack','list']) #声明一个迭代器
print(names)
print(names.__next__()) #访问方式
print(names.__next__())
print(names.__next__())
print(names.__next__()) #第四个会报错,因为迭代已经完了
name = ['alex','jack','list'] #声明一个元组
names = iter(['name','jack','list']) #声明一个迭代器
print(names)
print(names.__next__()) #访问方式
print(names.__next__())
print(names.__next__())
print(names.__next__()) #第四个会报错,因为迭代已经完了
2、生成器generator
定义:一个函数调用时返回一个迭代器,那这个函数就叫做生成器,如果函数中包含yield语法,那这个函数就会变成生成器
例:
def case_money(amount):
while amount > 0:
amount -= 100
yield 100
print('又来取钱了!')
def case_money(amount):
while amount > 0:
amount -= 100
yield 100
print('又来取钱了!')
atm = case_money(500)
print(type(atm)) #是迭代器
print(atm.__next__())
print(atm.__next__())
print(atm.__next__())
print('叫个大保健‘) #可以中断,干别的事情
print(atm.__next__())
print(atm.__next__())
print(atm.__next__()) #超过500报错
print(type(atm)) #是迭代器
print(atm.__next__())
print(atm.__next__())
print(atm.__next__())
print('叫个大保健‘) #可以中断,干别的事情
print(atm.__next__())
print(atm.__next__())
print(atm.__next__()) #超过500报错
3、使用yield实现单线程中的异步并发效果
例:
import time
def consumer(name):
print('%s is 吃包子了')
while True:
baozi = yield #接收包子信息
print('包子[%s]来了,被[%s]吃了'%(baozi,name))
print('%s is 吃包子了')
while True:
baozi = yield #接收包子信息
print('包子[%s]来了,被[%s]吃了'%(baozi,name))
def producer(name):
c1 = consumer('A')
c2 = consumer('B')
c1.__next__()
c2.__next__()
print('老子开始准备做包子啦')
for i in range(10):
time.sleep(1)
print('做了两个包子!')
c1.send(i) #把包子信息发给消费者
c2.send(i)
c1 = consumer('A')
c2 = consumer('B')
c1.__next__()
c2.__next__()
print('老子开始准备做包子啦')
for i in range(10):
time.sleep(1)
print('做了两个包子!')
c1.send(i) #把包子信息发给消费者
c2.send(i)
producer('alex')
4、装饰器原理介绍和基本实现
功能:给已经实现功能的函数再拓展功能
例:
#无参数的装饰器
①
def login(func):
print('passed user verification...')
return func
#无参数的装饰器
①
def login(func):
print('passed user verification...')
return func
def home(name):
print('welcome [%s] to home page'%name)
# def tv(name):
def tv(name):
print('welcome [$s] to home page'%name)
def movie(name):
print('welcome [%s] to home page'%name)
print('welcome [%s] to home page'%name)
# def tv(name):
def tv(name):
print('welcome [$s] to home page'%name)
def movie(name):
print('welcome [%s] to home page'%name)
tv = login(tv)
tv(alex)
tv(alex)
▲@login <==> tv = login(tv) tv(alex)
②
def login(func):
def inner(arg):
print('passed user verification...')
func(arg)
return inner
def home(name):
print('welcome [%s] to home page'%name)
print('welcome [%s] to home page'%name)
@login
def tv(name):
print('welcome to [%s] home page'%name)
def tv(name):
print('welcome to [%s] home page'%name)
def movie(name):
print('welcome [%s] to home page'%name)
print('welcome [%s] to home page'%name)
# tv = login(tv)
tv('alex')
tv('alex')
③
def login(func):
def inner(*args,**kwargs):
print('passed user verification...')
func(*args,**kwargs)
return inner
def home(name):
print('welcome [%s] to home page'%name)
print('welcome [%s] to home page'%name)
@login
def tv(name,passwd=123):
print('welcome to [%s] home page'%name)
def tv(name,passwd=123):
print('welcome to [%s] home page'%name)
@login
def movie(name):...
def movie(name):...
# tv = login(tv)
tv('alex',passwd='123')
5、递归原理
例:
def calc(n):
print(n)
if n/2 >1:
result = calc(n/2)
return result
print('N:',n)
calc(10)
项目实战:斐波那契数列
def func(arg1,arg2,stop):
if arg1 == 0:
print(arg1,arg2)
arg3 = arg1 + arg2
print(arg3)
if arg3<stop:
func(arg2,arg3,stop)
func(0,1,30)
6、正则表达式
正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。
所有关于正则表达式的操作都使用 python 标准库中的 re 模块。(#import re)
[]常用来指定一个字符集,匹配任意一个字符
例:
import re
st = 'top tip tqp twp tep'
result = r't[io]p'
re.findall(result,st)
例:
import re
st = 'top tip tqp twp tep'
result = r't[io]p'
re.findall(result,st)
^匹配行首
例:
s = 'hello world,hello boy'
r = r'hello'
re.findall(r,s)
例:
s = 'hello world,hello boy'
r = r'hello'
re.findall(r,s)
r = r'^hello' 必须以hello开头
re.findall(r,s)
re.findall(r,s)
$匹配行尾(行为被定为是要么是字符串尾,要么是一个换行字符后面的任何位置
例:
s = 'world hello, boy'
r = r'boy$'
re.findall(r,s)
例:
s = 'world hello, boy'
r = r'boy$'
re.findall(r,s)
.匹配任意字符,除了换行符
[...]
*匹配0个或多个的表达式
?匹配0个或1个有前边的正则表达式
?匹配0个或1个有前边的正则表达式
re.split(): 以…分隔开
re.findall() 找出分割符
re.sub() 切换分隔符
re.findall() 找出分割符
re.sub() 切换分隔符
7、模块介绍
定义:可以实现某个功能的代码集合
①time
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
②random
从一个序列中随机的抽取一个元素,可以使用 random.choice()
为了提取出N个不同元素的样本用来做进一步的操作,可以使用 random.sample()
如果你仅仅只是想打乱序列中元素的顺序,可以使用 random.shuffle()
生成随机整数,请使用 random.randint()
生成0到1范围内均匀分布的浮点数,使用 random.random()
为了提取出N个不同元素的样本用来做进一步的操作,可以使用 random.sample()
如果你仅仅只是想打乱序列中元素的顺序,可以使用 random.shuffle()
生成随机整数,请使用 random.randint()
生成0到1范围内均匀分布的浮点数,使用 random.random()
③os
os模块是与操作系统交互的一个接口
os.access(path, mode) # 检验权限模式
os.chdir(path) # 改变当前工作目录
os.chflags(path, flags) # 设置路径的标记为数字标记。
os.chmod(path, mode) # 更改权限
os.chown(path, uid, gid) # 更改文件所有者
os.chroot(path) # 改变当前进程的根目录
os.close(fd) # 关闭文件描述符 fd
os.write(fd, str) # 写入字符串到文件描述符 fd中. 返回实际写入的字符串长度
os.utime(path, times) # 返回指定的path文件的访问和修改的时间。
os.access(path, mode) # 检验权限模式
os.chdir(path) # 改变当前工作目录
os.chflags(path, flags) # 设置路径的标记为数字标记。
os.chmod(path, mode) # 更改权限
os.chown(path, uid, gid) # 更改文件所有者
os.chroot(path) # 改变当前进程的根目录
os.close(fd) # 关闭文件描述符 fd
os.write(fd, str) # 写入字符串到文件描述符 fd中. 返回实际写入的字符串长度
os.utime(path, times) # 返回指定的path文件的访问和修改的时间。
④sys
sys模块用于提供对python解释器的相关操作。
sys.stderr 错误输出
sys.stdin 标准输入
sys.stdout 标准输出
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.modules 返回系统导入的模块字段,key是模块名,value是模块
sys.exit(n) 退出程序,正常退出时exit(0)
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
sys.stderr 错误输出
sys.stdin 标准输入
sys.stdout 标准输出
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.modules 返回系统导入的模块字段,key是模块名,value是模块
sys.exit(n) 退出程序,正常退出时exit(0)
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
⑤shutil
高级的文件、文件夹、压缩包处理模块
shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中
shutil.copyfile(src, dst) 拷贝文件(文件可不存在)
shutil.copymode(src, dst) 仅拷贝权限。内容、组、用户均不变(文件必须存在)
shutil.copystat(src, dst) 仅拷贝状态的信息,包括:mode bits, atime, mtime, flags(目标文件必须存在)
shutil.copy(src, dst) 拷贝文件和权限
shutil.rmtree(path[, ignore_errors[, onerror]]) 递归的去删除文件
shutil.copymode(src, dst) 仅拷贝权限。内容、组、用户均不变(文件必须存在)
shutil.copystat(src, dst) 仅拷贝状态的信息,包括:mode bits, atime, mtime, flags(目标文件必须存在)
shutil.copy(src, dst) 拷贝文件和权限
shutil.rmtree(path[, ignore_errors[, onerror]]) 递归的去删除文件
shutil.move(src, dst) 递归的去移动文件,它类似mv命令,其实就是重命名。
shutil.make_archive(base_name, format,...)
shutil.make_archive(base_name, format,...)
创建压缩包并返回文件路径,例如:zip、tar
创建压缩包并返回文件路径,例如:zip、tar
format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir: 要压缩的文件夹路径(默认当前目录)
owner: 用户,默认当前用户
group: 组,默认当前组
logger: 用于记录日志,通常是logging.Logger对象
shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:
zipfile压缩解压缩
import zipfile
# 压缩
z = zipfile.ZipFile('laxi.zip', 'w')
z.write('a.log')
z.write('data.data')
z.close()
z = zipfile.ZipFile('laxi.zip', 'w')
z.write('a.log')
z.write('data.data')
z.close()
# 解压
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall(path='.')
z.close()
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall(path='.')
z.close()
⑥json&pickle
Json模块提供了四个功能:dumps、dump、loads、load
dumps 和 loads 用于python对象和字符串间的序列化和反序列化
dumps:将python 基本数据类型转化为json格式数据类型
loads:将json格式数据类型转化为python数据类型
dumps 和 loads 用于python对象和字符串间的序列化和反序列化
dumps:将python 基本数据类型转化为json格式数据类型
loads:将json格式数据类型转化为python数据类型
pikle模块提供 dumps loads dump load四个基本功能
dumps 和loads 用于python对象和字符串间的序列化和反序列化
dumps 和json.dumps功能一样,但是以字节对象形式返回封装的对象
loads和json.loads功能一样,从字节对象中读取被封装的对象,并返回
dumps 和loads 用于python对象和字符串间的序列化和反序列化
dumps 和json.dumps功能一样,但是以字节对象形式返回封装的对象
loads和json.loads功能一样,从字节对象中读取被封装的对象,并返回
⑦shelve
shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型。
⑧xml
xml是实现不同语言或程序之间进行数据交换的协议,可扩展标记语言,标准通用标记语言的子集。是一种用于标记电子文件使其具有结构性的标记语言。
⑨configparser
configparser用于配置文件解析,可以解析特定格式的配置文件,多数此类配置文件名格式为XXX.ini,例如mysql的配置文件。
⑩hashlib 用于加密相关的操作
suprocess 用来生成子进程,并可以通过管道连接他们的输入/输出/错误,以及获得他们的返回值。
logging logging.basicConfig()函数中通过具体参数来更改logging模块默认行为。
suprocess 用来生成子进程,并可以通过管道连接他们的输入/输出/错误,以及获得他们的返回值。
logging logging.basicConfig()函数中通过具体参数来更改logging模块默认行为。