python修炼day32!

QYFabc
关注

积累:

把有用的方法封装到文件中,注意积累

迭代器

iteration  # 迭代器

iterable  # 可迭代的、

保存的是生成数据的代码,不是数据

迭代器:

可迭代对象:有iter() 方法就是可迭代对象    def __iter__  (self):    迭代器: 同时有 iter() 和 next() 就是迭代器    def __iter__(self):    def __next__(self):斐波那契数列迭代器代码

class Fibonacci(object):

def __init__(self, all_num):

self.all_num =all_num

self.a = 0
       self.b = 1

self.num = 0

def __iter__(self):

return self

def __next__(self):

if self.num < self.all_num:

result = self.a

self.a, self.b = self.b, self.a + self.b

self.num += 1

return result

else:

raise StopIteration

f = Fibonacci(100)

for i in f:

print(i)

生成器

生成器是一种特殊的迭代器

列表推导式

保存的是生成的方式,不是数据

调用方式:next(obj)         obj.send

函数中有 yield, 那么这个函数就不在是函数,而是一个生成器的模板

调用一个函数时,发现这个函数中有yield 语句,那么此时,不是调用函数,而是创建一个生成器对象

def fibonacci(num):    n, a, b = 0, 0, 1    while n < num:        # print(a)        yield a        a, b = b, a + b        n += 1    return "---ok---"f = fibonacci(11)print(next(f))while True:    try:        r = next(f)        print(r)    except Exception as ret:        print(ret.value)        break# for i in f:#     print(i)

线程、进程、协程总结

多任务的概念:同一时刻执行多个任务

线程:"""创建线程的两种方式"""import threadingdef sing(num):    passt = threading.Thread(targets=sing, args=(1,))t.start()"""继承的方式"""class MyThread(threading.Thread):    def run(delf):        passt = MyThread()t.start()

特点

线程运行在进程中,线程依赖于进程线程比进程的系统开销小    共享全局资源(变量)协程运行在线程中,把线程空闲时间利用起来,实现多任务

资源竞争

互斥锁:解决线程中资源竞争的问题    lock = threading.Lock()    lock.acquire()  # 上锁    代码。。。    lock.release()  # 解锁死锁:两个线程都在等待对方释放锁进程"""创建进程的方式"""import multiprocessingdef sing(a, b):    passp = multiprocessing.Process(target=sing, args=(1, 2), kwargs=(name="xiaohei"))"""继承的方式"""class MyProcess(multiprocessing.Process):    def run(self):        passp = MyProcess()p.start()

特点

定义:正在运行的程序,在任务列表中可以查看进程运行起来后可以调度系统资源占用的系统的开销最大写时拷贝:即修改的时候去把代码赋值一份进程不共享全局变量进程结束了,里面所有的线程、协程也都结束了

进程间通讯

q = multiprocessing.Queue()   # 创建队列q.put("数据")  # 放数据q.get()  # 取数据

进程池

作用:它是一个缓存池,避免了重复的创建进程,销毁进程的一些不必要的系统开销    从而提高了程序运行的效率pool = multiprocessing.Pool(3)  # 创建进程池,最大进程数为3pool.apply_async(函数名,())  # 开启进程pool.close()  # 关闭进程池pool.join()  # 等待所有的进程结束进程池中创建队列q = multiprocessing.Manager.Queue()协程

迭代器

可迭代对象:有iter() 方法就是可迭代对象    def __iter__  (self):    迭代器: 同时有 iter() 和 next() 就是迭代器    def __iter__(self):    def __next__(self):

生成器

定义:是一个特殊的迭代器    存储的是生成数据的方式,而不存储数据如何写生成器def a():    result = yield a    return ""try:    obj = a()    next(obj)    obj.send(“传递数据”)except Exception as e:    e.valueyield 关键字:保存当前运行状态(断点),然后暂停执行,即将生成器(函数)挂起将yield关键字后面表达式作为返回值返回,起到了return的作用,可以使用next()函数让生成器从断点出继续执行

协程

yield

运行在一个线程中,利用线程的空闲时间完成多任务系统开销最少

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存