python实战
ben1949
这个作者很懒,什么都没留下…
展开
-
python 8-1 如何使用多线程,Thread创建线程,执行函数赋值给target//类+函数放在run方法中执行
python 8-1 如何使用多线程使用标准库中的threading.Thread创建线程, 在每一个线程中下载并转换一只股票数据首先python受限于GIL的缘故,多线程只适合IO包括网络IO,磁盘IO,密集型的任务,不适合计算密集型的任务实现多线程一般有两种方式第一种:直接将需要执行逻辑部分的函数赋值给target t = Thread(target=handle,args=(1,)) t.原创 2017-01-28 17:20:32 · 2220 阅读 · 0 评论 -
python 8-3-1 使用tarfile可以实现文件的压缩打包
python 8-3-1 使用tarfile可以实现文件的压缩打包将当前目录下所有的以xml结尾的文件压缩打包import tarfileimport osdef tarXml(tfname): tf = tarfile.open(tfname,"w:gz") for fname in os.listdir('.'): if fname.endswith('.x原创 2017-01-28 17:27:55 · 1176 阅读 · 0 评论 -
python 8-2 如何线程间通信,使用标准库中Queue.queue,它是一个线程安全的队列
python 8-2 如何线程间通信,使用标准库中Queue.queue,它是一个线程安全的队列 解决方案: 使用标准库中Queue.queue,它是一个线程安全的队列 Download线程把下载数据放入队列,Convert线程从队列里提取数据from xml.etree.ElementTree import Element,ElementTreefrom xml.dom.minidom i原创 2017-01-28 17:22:53 · 1680 阅读 · 0 评论 -
python 7-5 如何让类支持比较操作lt/le/total_ordering可以简化此过程,实现lt eq 后,可以推测出<= >=方法
python 7-5 如何让类支持比较操作解决方案 第一种方案实现如下方案 比较符号运算符重载,要实现以下方法 lt le gt ge eq ne第二种方案 使用标准库中的functools下的类装饰器total_ordering可以简化此过程, 实现lt eq 后,total_ordering可以推测出<= >=方法 def lt(self,rect):原创 2017-01-28 16:35:42 · 2531 阅读 · 0 评论 -
python 7-4 如何创建可管理的对象属性R = property(getRadius,setRadius)或者@property @radius.setter
python 7-4 如何创建可管理的对象属性R = property(getRadius,setRadius)或者@property @radius.setter解决方案: 1. 使用property函数为类创建可管理属性,fget/fset/fdel对应的属性访问 R = property(getRadius,setRadius)c2=Circle(1.0) c2.R=2.0原创 2017-01-28 16:26:28 · 1132 阅读 · 0 评论 -
7-3 如何让对象支持上下文管理协议,需要定义__enter__, __exit__方法 分别在with开始和结束时候被调用
7-3 如何让对象支持上下文管理 解决方案: 实现上下文管理协议,需要定义enter, exit方法 他们分别在with开始和结束时候被调用with TelnetClient2('127.0.0.1') as client: client.start() 对象client是来自于__enter__函数的返回最后退出的时候不管是否存在异常,都将会进入到__exit__处理wi原创 2017-01-28 16:20:20 · 636 阅读 · 0 评论 -
7-2 如何为创建大量实例节省内存定义类的__slots__属性,它是用来声明实例属性名,sys.getsizeof字的列表
7-2 如何为创建大量实例节省内存解决方案: 定义类的slots属性,它是用来声明实例属性名字的列表 有了slots之后对象就不可以再新添加属性 p1.xdictimport sysclass Player(object): def __init__(self,uid,name,status=0,level=1): self.uid = uid self原创 2017-01-28 16:16:37 · 370 阅读 · 0 评论 -
python 6-5 如何读写excel文件 使用第三方库xlrd 和 xlwt,这两个库分别用于excel读和写
6-5 如何读写excel文件解决方案 使用第三方库xlrd 和 xlwt,这两个库分别用于excel读和写安装第三方包pip install xlrd xlwt读写excel文件import xlrdimport xlwtbook=xlrd.open_workbook('demo.xlsx')book.sheets()sheet=book.sheet_by_index(0)print原创 2017-01-27 10:52:40 · 834 阅读 · 0 评论 -
python 6-4 如何构建xml文档使用标准库中的xml.etree.ElementTree 构建ElementTree,使用write方法写入文档
python 6-4 如何构建xml文档使用标准库中的xml.etree.ElementTree 构建ElementTree,使用write方法写入文档 root=minidom.Document()”’6-4 如何构建xml文档 使用标准库中的xml.etree.ElementTree 构建ElementTree,使用write方法写入文档”’from xml.dom.minidom imp原创 2017-01-27 10:47:52 · 5811 阅读 · 0 评论 -
python 6-3 如何解析简单的xml文档 使用标准库中的xml.etree.ElementTree,其中parse函数可以解析xml文档
6-3 如何解析简单的xml文档 使用标准库中的xml.etree.ElementTree,其中parse函数可以解析xml文档https://docs.python.org/2.7/library/xml.etree.elementtree.html?highlight=etree#module-xml.etree.ElementTreeroot.find(‘tagname’) root.f原创 2017-01-27 09:32:06 · 7280 阅读 · 0 评论 -
python 6-2 如何读写json数据
python 6-2 如何读写json数据 3-2 中有提到使用request去获得天气预报 解决方案 使用标准库中的json模块,其中loads,dumps函数可以完成json数据的读写json.dumps()将一个python对象转换成为json字符串 print json.dumps(l,separators=[‘,’,’:’]) 可以将多余的空格去掉 json.dumps(d,so原创 2017-01-26 11:51:56 · 925 阅读 · 0 评论 -
python 6-1 如何读写csv数据reader=csv.reader(rf)/writer=csv.writer(wf)
python 6-1 如何读写csv数据reader=csv.reader(rf)/writer=csv.writer(wf)解决方案: 使用标准库中的csv模块,可以使用其中reader和writer 完成对csv文件的读写http://table.finance.yahoo.com/table.csv?s=000001.szcsv 模块csv读rf=open("xx.csv",'rb')re原创 2017-01-26 11:35:33 · 2974 阅读 · 0 评论 -
python 5-6 tempfile下的TemporaryFile 和 NamedTemporaryFile
python 5-6 tempfile下的TemporaryFile 和 NamedTemporaryFile解决方案 使用标准库中的tempfile下的TemporaryFile 和 NamedTemporaryFile TemporaryFile 这个在文件系统中找不到文件的 NamedTemporaryFile 这个在文件系统中可以找到文件,前提是需要加上(delete=Fals原创 2017-01-26 11:05:37 · 6333 阅读 · 0 评论 -
python 5-5 如何访问文件的状态os.stat()/os.path
5-5 如何访问文件的状态 1.文件的类型(普通文件 ,目录 符号链接,设备文件 2.文件的访问权限 3.文件爱你最后访问/修改/节点状态更改时间 4.普通文件的大小解决方案 系统调用 表中库os模块中的三个系统调用 stat fstat lstat获取文件状态 如果是符号链接文件 stat之后渠到的是指向的文件属性 , lstat才是获取到符号链接文件的属性 fstat需要的文件描原创 2017-01-26 10:55:44 · 1443 阅读 · 0 评论 -
python 8-3-1 使用tarfile可以实现文件的压缩打包
python 8-3-1 使用tarfile可以实现文件的压缩打包将当前目录下所有的以xml结尾的文件压缩打包import tarfileimport osdef tarXml(tfname): tf = tarfile.open(tfname,"w:gz") for fname in os.listdir('.'): if fname.endswith('.x原创 2017-01-28 17:28:38 · 392 阅读 · 0 评论 -
python 8-3 如何在线程间进行事件通知
python 8-3-1 使用tarfile可以实现文件的压缩打包解决方案: 线程间的事件通知,可以使用标准库中的Threading.Event,如果是两个线程一般会用到2组eVent来相互通知 1.等待事件一端调用wait,等待事件 event.wait(),如果要wait持续生效 得event.clear() 2.通知事件一端调用set,通知事件 event.set() 3.daem原创 2017-01-28 17:30:43 · 1783 阅读 · 0 评论 -
python 5-4 如何将文件映射到内存mmap.mmap(f.fileno(),0,access=mmap.ACCESS_WRITE)
python 5-4 如何将文件映射到内存解决方案使用标准库中mmap模块的mmap函数,它需要一个打开文件描述符作为参数 Unix: mmap(fileno, length[, flags[, prot[, access[, offset]]]])#文件描述符获取方法 1.os.open() 2.f=open("test.txt",20) f.fileno ==>获得文件描述符使用dd原创 2017-01-26 09:14:40 · 2231 阅读 · 0 评论 -
python 7-1 如何派生内置不可变类型(int,str,tuple,float)并修改实例化行为,继承内置tuple并实现__new__
7-1 如何派生内置不可变类型(int,str,tuple,float)并修改实例化行为解决方案: 定义类IntTuple继承内置tuple,并实现new,修改实例化行为比如我们需要做一个定制化的浮点数,只取小数点后面2位class MyFloat(float): def __init__(self,floatDigit): super(MyFloat,self).__i原创 2017-01-28 11:45:04 · 3277 阅读 · 0 评论 -
python 9-3 如何定义带参数的装饰器,提取函数签名python3 inspect.signature()
9-3 如何定义带参数的装饰器提取函数签名python3 inspect.signature() 带参数的装饰器,也就是根据参数定制化一个装饰器可以看生成器的工厂 每次调用typeassert,返回一个特定的装饰器,然后用它去装饰其他函数from inspect import signaturedef f(a,b,c=1):passsig = signature(f)sig.paramete原创 2017-01-29 10:57:47 · 7620 阅读 · 0 评论 -
python 9-5 如何在类中定义装饰器,在包裹函数中就可以持有实例对象,便于修改属性和功能
9-5 如何在类中定义装饰器 解决方案: 为了让装饰器在使用上更加灵活,可以把类的实例方法作为装饰器 此时在包裹函数中就可以持有实例对象,便于修改属性和功能 import loggingfrom time import localtime,time,strftime,sleepclass CallingInfo(object): def __init__(self,name):原创 2017-01-30 08:40:06 · 1085 阅读 · 0 评论 -
python 9-4 如何实现属性可修改的函数装饰器,python3 nolocal或者在python2中列表方式
python 9-4 如何实现属性可修改的函数装饰器,python3 nolocal或者在python2中列表方式,这样就不会在函数本地新建一个局部变量原创 2017-01-30 08:37:35 · 810 阅读 · 0 评论 -
python 9-2 如何为被装饰的函数保存元数据,使用标准库functools中的装饰器wraps 装饰内部包裹函数
9-2 如何为被装饰的函数保存元数据解决方案: 使用标准库functools中的装饰器wraps 装饰内部包裹函数,可以 制定将原函数的某些属性,更新到包裹函数的上面 其实也可以通过 wrapper.name = func.name update_wrapper(wrapper, func, (‘name‘,’doc‘), (‘dict‘,))f.name 函数的名字 f.doc 函数文原创 2017-01-29 10:54:01 · 494 阅读 · 0 评论 -
python 9-1 如何使用函数装饰器,定义函数装饰器,用来生成一个原函数基础添加新功能的函数,替代原函数
python 9-1 如何使用函数装饰器,定义函数装饰器,用来生成一个原函数基础添加新功能的函数,替代原函数def memo(func): cache = {} def wrapper(*args): if args not in cache: cache[args] = func(*args) return cache[arg原创 2017-01-29 09:20:51 · 620 阅读 · 0 评论 -
python 8-5 如何使用线程池 线程池是指分配固定个数的线程,concurrentfutues下的ThreadPoolExecutor
8-5 如何使用线程池解决方案: 线程池是指分配固定个数的线程线程池 python3 标准库中concurrentfutues下的ThreadPoolExecutor 对象的submit 和 map方法可以用来启动线程池中线程执行任务executor = ThreadPoolExecutor(3) def f(a,b): print(‘f’,a,b) return a原创 2017-01-28 17:38:45 · 3855 阅读 · 0 评论 -
python 8-4 如何使用线程本地数据,threading.local函数可以创建线程本地数据空间,属性对每个线程独立存在
8-4 如何使用线程本地数据解决方案: threading.local函数可以创建线程本地数据空间,其下属性对每个线程独立存在,比如如下例子,l.x是主线程的local 变量 在线程 t 中调用红f 去访问就报错了说找不到这个变量了l = threading.local() l.x = 0 import threading l = threading原创 2017-01-28 17:32:50 · 919 阅读 · 0 评论 -
python 7-8 如何通过实例方法名字的字符串调用方法/使用getattr/标库operator下的methodcaller函数
python 7-8 如何通过实例方法名字的字符串调用方法/使用内置函数getattr/标库operator下的methodcaller函数方法1.使用内置函数getattr,通过名字在实例上获取方法对象,然后调用def getArea(shape): for name in (‘area’,’getArea’,’get_area’): f = getattr(shape原创 2017-01-28 16:53:09 · 2872 阅读 · 0 评论 -
python 7-7 如何在环状数据结构中管理内存,标准库中的weakref,创建一种能访问对象但不能增加引用计数的对象
python 7-7 如何在环状数据结构中管理内存,使用标准库中的weakref,创建一种能访问对象但不能增加引用计数的对象解决方案: 使用标准库中的weakref,它可以创建一种能访问对象但不能增加引用计数的对象 wref=weakref.ref(owner) ==>当所有引用owner的对象都被delete了,wref就不会指向真实的对象了a_wref = weakref.ref(a)原创 2017-01-28 16:45:52 · 503 阅读 · 0 评论 -
python 7-6 如何使用描述符对实例属性做类型检查,分别实现set,方法,在set内使用isinstance做类型检查
python 7-6 如何使用描述符对实例属性做类型检查解决方案使用描述符来实现需要类型检查的属性: 分别实现get,set,__delete方法 在set内使用isinstance函数做类型检查由于python是弱类型语言,变量可以指向任意的对象,我们可以给变量加上类型限制class Attr(object): def __init__(self,name,type_):原创 2017-01-28 16:40:07 · 517 阅读 · 0 评论 -
python 8-6 如何使用多进程,使用标准库中的multiprocessing.Process,它可以启动子进程执行任务
8-6 如何使用多进程 解决方案: 使用标准库中的multiprocessing.Process,它可以启动子进程执行任务 操作接口,进程间通信,进程间同步都与threading.Thread类似由于GIL 锁的存在,对于CPU 密集型的任务,python多线程发挥不出多cpu的优势使用多进程,系统确实会生成两个进程,并且两个进程分别会去占用两个CPU,真正意义上实现多线程调度from mult原创 2017-01-28 17:41:19 · 746 阅读 · 0 评论 -
python 5-3 如何设置文件的全缓冲(硬盘 缓冲大小满了,就落盘),行缓冲(tty),无缓冲(串口)
python 5-3 如何设置文件的全缓冲(硬盘 缓冲大小满了,就落盘),行缓冲(tty),无缓冲(串口)在日常工作中,经常都会碰到文件的操作,说到文件提到最多的是缓存,所谓缓存是指linux OS从磁盘中读到文件后系统会把读到的内容暂存起来,或者linux OS 写入操作时候,会等到内容达到一定长度时候才会写入磁盘文件缓冲 分为全缓冲(硬盘 缓冲大小满了,就落盘),行缓冲(tty),无缓冲(串原创 2017-01-26 08:48:25 · 1347 阅读 · 0 评论 -
python metaclass的理解
python metaclass的理解 1.type,获得变量类型 type(object) -> the object’s type>>> a = 2>>> type(a)<type 'int'>>>> type(type(a))<type 'type'>>>>>>> class MM(object):... def __init__(self):... sel原创 2017-02-14 10:43:26 · 727 阅读 · 0 评论 -
python 5-2 如何处理二进制文件open("test.wav","rb")/struct.pack/unpack/array('h',(0 for _ in xrange(n)))
python 5-2 如何处理二进制文件open(“test.wav”,”rb”)/struct.pack/unpack/array(‘h’,(0 for _ in xrange(n)))解决方案:open函数以二进制模式打开,指定mode 参数为 'b'二进制数据可以通过readinto,读入到提前分配好的buffer中,便于数据处理,buffer=array.array('i',(0 f原创 2017-01-25 11:15:43 · 1391 阅读 · 0 评论 -
python 3-5 如何对迭代器做切片操作itertools.islice(open("test.txt"),0,10),迭代器消耗
文件对象无法进行切片操作islice用于切片操作islice(iterable, [start,] stop [, step]) --> islice objectislice(f,0,10) 取文件的前10行islice(f,100,300) #生成 文件 100 到 300 行的生成器,不包含第300行islice(f,500) #生成500行以内的生成器islice(f,500,N原创 2017-01-16 20:37:15 · 5853 阅读 · 0 评论 -
python 3-5-1 关于文件的操作-open/read/readlines/seek/write/writelines
关于文件的操作f = open(“test.sh”) f是一个可迭代对象 readlines() 方法是将文件的所有内容放进列表中,如果文件非常大,内存消耗是个极大的问题 readline() 既然open()返回的是一个可迭代对象,则可以用for循环来逐行取出 seek() 当readlines 或者readline迭代结束以后,文件的指针就指向了文件尾,可以通过f.seek(0)将文件指针原创 2017-01-16 18:33:53 · 1195 阅读 · 0 评论 -
Python 面试题 https://github.com/taizilongxu/interview_python
转载http://python.jobbole.com/85231/转载 2017-02-07 16:48:19 · 3195 阅读 · 0 评论 -
python 3-3 如何使用生成器函数实现可迭代对象 __iter__,yield
python 3-3 如何使用生成器函数实现可迭代对象 iter,yield生成器函数yieldyield是python中的一个关键字,一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next() (在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行原创 2017-01-16 10:05:54 · 2474 阅读 · 0 评论 -
python 3-4 如何进行反向迭代以及如何实现反向迭代 __reversed__ yield
python 3-4 如何进行反向迭代以及如何实现反向迭代 reversed yield正向迭代器 和 逆向迭代器l = [1,2,3,4]>>> iter(l)<listiterator object at 0xb7ec37cc>>>> reversed(l)<listreverseiterator object at 0xb7ec37ec>l=[1,2,3,4,5]l.reverse(原创 2017-01-16 16:09:53 · 6179 阅读 · 0 评论 -
python 3-2 如何实现可迭代对象和迭代器对象(2) BookIterable/BookIterator
3-2 如何实现可迭代对象和迭代器对象(2) BookIterable/BookIterator实现BookIterable/BookIteratorBookIterable 实现iter 返回BookIterator 迭代器对象 BookIterator 通过next函数每个元素的具体的内容(书的历史最低价和最高价)from collections import Iterablefrom co原创 2017-01-15 20:44:47 · 412 阅读 · 0 评论 -
python 3-1 如何实现可迭代对象iterable和迭代器对象iterator,__iter__,__getitem__
3-1 如何实现可迭代对象和迭代器对象先看看如何遍历list的la = [1,2,3]for x in la: ==>其实是先取得iterator,然后调用iterator.next() print x如下是for循环的迭代的过程>>> la = [1,2,3]>>> iterator1 = iter(la)>>> iterator1.next()1>>> iterator1.ne原创 2017-01-15 19:38:21 · 973 阅读 · 0 评论 -
python 2-7 如何实现用户的历史记录功能(最多n条)collections.deque/pickle持久存储
2-7 如何实现用户的历史记录功能(最多n条)collections.deque/pickle持久存储 使用collections deque,设定最大元素个数N,如果超过N,就会把最早进入队列的元素给挤掉 可以用pickle 对队列对象实现持久化存储,再次运行时候可以重新loaddeque和pickle的用法deque1 = deque([],5)deque1.append(k)f = o原创 2017-01-15 19:04:07 · 983 阅读 · 0 评论