python修炼day32!
积累:
把有用的方法封装到文件中,注意积累
迭代器
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
运行在一个线程中,利用线程的空闲时间完成多任务系统开销最少
最新活动更多
-
11月28日立即报名>>> 2024工程师系列—工业电子技术在线会议
-
12月19日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
-
即日-12.26火热报名中>> OFweek2024中国智造CIO在线峰会
-
即日-2025.8.1立即下载>> 《2024智能制造产业高端化、智能化、绿色化发展蓝皮书》
-
精彩回顾立即查看>> 2024 智能家居出海论坛
-
精彩回顾立即查看>> 【在线会议】多物理场仿真助跑新能源汽车
推荐专题
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论