zoukankan      html  css  js  c++  java
  • 生成器迭代器正则视频笔记

    多任务文件夹:
    import os
    os.mkdir(old_name+"复件") 创建文件夹

    os.listdir("dirname") 返回一个列表
    multiprocessing 多进程
    创建进程池:
    po = multiprocessing.Pool(5)
    for work in works:
    po.apply_async(函数地址,函数参数)

    multiprocessing.Queue()
    print(" %.2f %% " % args, end="")
    回到行首 %.2f 保留两位小数 %% 显示% end=""不换行

    协程:
    迭代器: 只能往前不会回退。
    for in 元祖, 列表 , 字典 ,字符串
    判断是不是可以迭代对象:
    collections import Iterable
    isinstance(Object, Iterable)

    print("xxxx",isinstance(classmate,Iterable)) 打印元祖

    必须有__iter__(self):
    def

    保证一个对象成为一个可迭代对象. 保证类里有__iter__(self): 方法

    from collections import Iterable
    class Classmate(object):
    def __init__(self):
    self.name = list()

    def add(self, name):
    self.name.append(name)

    def __iter__(self):
    return ClassIterator(self) //返回一个可以迭代实例 传入self 创建一个对象。

    class ClassIterator(object):
    def __init__(self,obj):
    self.obj = obj
    self.currentNum = 0
    def __iter__(self):
    pass
    def __next__(self):
    if self.currentNum < len(self.obj.names):
    ret = self.obj.naems[self.currentNum]
    self.currentNum +=1
    return ret // 返回
    else:
    raise StopIteration


    迭代器有: __iter__, __next__;
    怎么判读是否是可迭代对象。
    1 判断是不是有iter方法。
    2 判断是不是有next方法。


    有iter方法和next方法: 是可迭代对象。

    32/G跳转

    for name in classmate:
    1 判断classmate有没有iter方法
    2 调用iter方法
    3 iter方法返回一个迭代器
    4 迭代器调用__next__方法

    学迭代器有什么用? 为了节省空间,减少内存空间。一个生成需要值的方法。
    用大量数据。不能
    %s/old/new/g 替换

    接受可迭代对象:li = list(a)

    迭代器生成方式1
    生成器是一种特殊的迭代器。
    列表推到式:
    nums = [x*2 for x in range(10)]
    nums = (x*2 for x in range(10))

    含有: yeild的 函数 生成器。
    迭代器生成方式2
    def create_num(all_num):
    a, b = b, a+b
    currentNum = 0
    while currentNum < all_num:
    yield a
    a, b = b, a+b
    currentNum +=1

    obj = create_num(10) 生成器
    next(obj) 通过next取得生成器的结果。

    函数含有yield 就是生成器。

    while True:
    try:
    ret = next(obj)
    except Exception as ret:
    break


    启动生成器:
    obj.send("hahaha")
    让一个函数暂停执行。
    完成多任务:


    import time

    def task_1():
    while True:
    print("----1---")
    time.sleep(0.1)
    yield

    def task_2():
    while True:
    print("---2---")
    time.sleep(0.1)
    yield
    def main():
    t1 = task_1()
    t2 = task_2()
    while True:
    next(t1)
    next(t2)

    if __name__ == "__main__":
    main()

    并发: 假的并行。

    用greenlet

    from greenlet import greenlet
    import time

    并发库:

    gevent 库 遇到耗时炒作 切换执行。


    import gevent
    import time


    def f1(n):
    for i in range(n):
    print(gevent.getcurrent(),i) // getcurrent() 反对调用对象
    gevent.sleep(0.5)
    def f2(n):
    for i in range(n):
    print(gevent.getcurrent(),i) // getcurrent() 反对调用对象
    gevent.sleep(0.5)
    def f3(n):
    for i in range(n):
    print(gevent.getcurrent(),i) // getcurrent() 反对调用对象
    gevent.sleep(0.5)


    g1 = gevent.spawn(f1,5)
    g2 = gevent.spawn(f2,5)
    g3 = gevent.spawn(f3,5)

    g1.join()
    g2.join()
    g3.join()


    打补丁: from gevent import monkey
    monkey.patch_all() 自动蒋耗时操作换乘gevent中的函数。


    gevent.joinall([gevent.spawn(f1,"name"),
    gevent.spawn(f1,"name")]);

    from urlib.request
    import gevent
    from
    def downloader(filename,fileurl):
    req = urllib.request.urlopen("fileurl")
    img = req.read()
    with open(filename, "wb") as f:
    f.write(img)

    def main():
    gevent.joinall([gevent.spawn(downloader,'https://rpic.xxxx.com'),
    gevent.spawn(downloader,'https://rpic.xxxx.com')])


    if __name__ == "__main__":
    main()

    目的: 数据的处理。

    规则:清洗数据。
    import re
    result = re.match()
    满足需求有返回值。

    re.match(r"[hH]ello","hello world")
    是不是符合我的规范:

    单个字符: d 匹配数值 = 0到9
    [] 匹配范围,限制 [1-8a-zA-Z]
    w 任意字符
    s 空格
    . 任意单个字符

    多个字符: d{1,3} 前面紧挨着的字符
    ? 前面前面一位可有可无。 匹配电话号: r"d{3,4}-?d{7,8}"
    .* 不能匹配换行, re.S 匹配行换
    .+ 必须有一个。

    match 判断开头

    判断开头和结尾: ^ 开头
    $ 结尾
    转移 匹配邮箱: r"[a-zA-Z_0-9]{4-20}@163.com$"
    | 或
    ()分组

  • 相关阅读:
    将数据导入PostGIS
    图层管理
    CentIOS PHP 扩展库
    js 笔记 数组(对象)
    JSP 中的 Request 和 Response 对象
    ubuntu 安装 LAMP
    html 学习笔记
    Struts Ajax Json
    Servlet 笔记
    PHP+MYSQL 出现乱码的解决方法
  • 原文地址:https://www.cnblogs.com/countryboy666/p/12204081.html
Copyright © 2011-2022 走看看