摘要:
生产者-消费者问题与quene模块 下面使用线程锁以及队列来模拟一个典型的案例:生产者-消费者模型。在这个场景下,商品或服务的生产者生产商品,然后将其放到类似队列的数据结构中,生产商品的时间是不确定的, 同样消费者消费生产者的商品的时间也是不确定的。 这里使用quene模块来提供线程间通信的机制,也就是说,生产者和消费者共享一个队列。生产者生产商品后,会将商品添加到队列中。消费者消费商品,... 阅读全文
摘要:
python参数 关键字参数和默认值 默认值又叫位置参数 下面实例中 ("李宁") 是位置参数,(greeting="hello") 是关键字参数 实例 def greet(name,greeting): return "问候语:{} 姓名:{}".format(greeting,name) print(greet("李宁",greeting="hello")) E:\py... 阅读全文
摘要:
生成器 如果说迭代器是以类为基础的单位产生器,那么生成器(generator)就是以函数为基础的单位产生器。也就是说,迭代器和生成器都是一个值一个值得生产,每迭代一次,只能得到一个值, 所不同的是,迭代器需要在类中定义__iter__和__next__方法,在使用时需要创建迭代器的实例。而生成器是通过一个函数展现的,可以直接调用, 所以从某种意义上来说,生成器在使用上更简洁。 创建称生... 阅读全文
摘要:
迭代器和生成器的区别 如果说迭代器是以类为基础的单位产生器,那么生成器(generator)就是以函数为基础的单位产生器。也就是说,迭代器和生成器都是一个值一个值得生产,每迭代一次,只能得到一个值, 所不同的是,迭代器需要在类中定义__iter__和__next__方法,在使用时需要创建迭代器的实例。而生成器是通过一个函数展现的,可以直接调用, 所以从某种意义上来说,生成器在使用上更简洁。... 阅读全文
摘要:
迭代器 为什么要用迭代器 为什么不使用列表而使用迭代器,列表可以获取列表长度,然后使用变量i对列表索引进行循环,而且容器理解,也可以获取集合的所有元素。 没错,使用列表的代码是容易理解也很好操作,但这是要付出代价的。列表之所以可以用索引来快速定位其中的任何一个元素,是因为列表是一下子将所有的数据都装在在内存中, 而且是一块连续存在的空间。当数量比较小时,实现比较容易;当数据量大时,会非常... 阅读全文
摘要:
异常处理 什么是异常 当遇到错误后,会引发异常。如果异常对象没有处理异常,或未步捕捉异常,程序就会终止执行,并向用户返回异常信息。通常异常信息会告知错误的代码行以及其他有助于定位 错误的信息,以便程序员可以快速定位有错误的代码 主动抛出异常 raise Exception 实例: raise Exception("这是自己主动抛出的一个异常") 捕捉异常 如果异常未捕捉,... 阅读全文
摘要:
测试 使用Flak8检测python代码的错误和警告 pip install flake8 flake8 test.py 实例: [root@test3 ~]# flake8 test.py test.py:4:1: E302 expected 2 blank lines, found 1 test.py:9:1: E302 expected 2 blank lines, found... 阅读全文
摘要:
python多线程使用场景 如果程序时cpu密集型的,使用python的多线程是无法提升效率的,如果程序时IO密集型的,使用python多线程可以提高程序的整体效率 CPU密集型(CPU-bound) CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存), I/O在很短... 阅读全文
摘要:
CPU密集型(CPU-bound) CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存), I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。 IO密集型(I/O bound) IO密集型指的是系统的CPU性能相对硬盘、内存要好很多,... 阅读全文
摘要:
实例:#定义一个生成器 def mygGenerator(): numList=[1,2,3,4,5,6,7,8] for num in numList: #yield 语句会冻结当前函数,并提交当前要生成的值(本例是num) yield num #对迭代器进行迭代 for num in mygGenerator(): print(... 阅读全文