Python(Day4)

基础篇:
(基础知识+实例+项目开发)

1、迭代器原理及使用
作用:是访问集合元素的一种方式
优点:迭代器只往前不后退,可以省内存
特点:访问者只需通过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('又来取钱了!')
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报错

3、使用yield实现单线程中的异步并发效果
例:
import time
def consumer(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)
producer('alex')


4、装饰器原理介绍和基本实现
功能:给已经实现功能的函数再拓展功能

例:
#无参数的装饰器

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)
tv = login(tv)
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)
@login
def tv(name):
    print('welcome to [%s] home page'%name)
def movie(name):
    print('welcome [%s] to home page'%name)
# tv = login(tv)
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)
@login
def tv(name,passwd=123):
    print('welcome to [%s] home page'%name)
@login
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)

^匹配行首
例:
s = 'hello world,hello boy'
r = r'hello'
re.findall(r,s)
r = r'^hello' 必须以hello开头
re.findall(r,s)

$匹配行尾(行为被定为是要么是字符串尾,要么是一个换行字符后面的任何位置
例:
s = 'world hello, boy'
r = r'boy$'
re.findall(r,s)

.匹配任意字符,除了换行符
[...]
*匹配0个或多个的表达式
?匹配0个或1个有前边的正则表达式
re.split():  以…分隔开
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 当前时区的名称
%% %号本身

②random
从一个序列中随机的抽取一个元素,可以使用 random.choice()
为了提取出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文件的访问和修改的时间。

④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       返回操作系统平台名称

⑤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.move(src, dst) 递归的去移动文件,它类似mv命令,其实就是重命名。
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', 'r')
z.extractall(path='.')
z.close()

⑥json&pickle
Json模块提供了四个功能:dumps、dump、loads、load
dumps 和 loads 用于python对象和字符串间的序列化和反序列化
dumps:将python 基本数据类型转化为json格式数据类型
loads:将json格式数据类型转化为python数据类型
pikle模块提供 dumps loads dump load四个基本功能
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模块默认行为。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值