随笔分类 -  编程语言[Python]

摘要:一、Python中的线程使用:Python中使用线程有两种方式:函数或者用类来包装线程对象。1、函数式:调用thread模块中的start_new_thread()函数来产生新线程。如下例:view plaincopy to clipboardprint?importtimeimportthreaddeftimer(no,interval):cnt=0whilecnt10:print'Thread:(%d)Time:%s\n'%(no,time.ctime())time.sleep(interval)cnt+=1thread.exit_thread()deftest():#Usethread 阅读全文
posted @ 2011-01-25 17:16 tqsummer 阅读(226986) 评论(19) 推荐(14)
摘要:python可以方便地支持多线程。可以快速创建线程、互斥锁、信号量等等元素,支持线程读写同步互斥。美中不足的是,python的运行在python 虚拟机上,创建的多线程可能是虚拟的线程,需要由python虚拟机来轮询调度,这大大降低了python多线程的可用性。我们经今天用了经典的生产者和消费者的问题来说明下python的多线程的运用 上代码:#encoding=utf-8importthreadingimportrandomimporttimefromQueueimportQueueclassProducer(threading.Thread):def__init__(self,thread 阅读全文
posted @ 2011-01-25 17:12 tqsummer 阅读(3336) 评论(0) 推荐(0)
摘要:刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就不难理解了。先说说函数定义,我们都知道,下面的代码定义了一个函数funcAdef funcA(): pass显然,函数funcA没有参数(同时啥也不干:D)。下面这个函数funcB就有两个参数了,def funcB(a, b): print a print b调用的时候,我们需要使用函数名,加上圆括号扩起来的参数列表,比如 funcB(100, 99),执行结果是:10099很明显,参数的顺序和个数要和函数定义中一致, 阅读全文
posted @ 2011-01-25 11:30 tqsummer 阅读(98386) 评论(4) 推荐(15)
摘要:python 函数返回值有两种形式: 1 返回一个值。 2 返回多个值。 现看看返回一个值的吧。deffirstvalue(a,b):c=a+breturncprintfirstvalue(1,2)结果:3再看看返回多个值的: 那怎么可以返回多个值呢,其他的语言一般调用函数的话,只能返回一个值,可能我不太熟悉所有的语言,我知道的语言只能返回一个值,而python可以返回多个值,感觉非常方便,发代码看下:defsecondvalue(a,b):c=a+breturn(a,b,c)x,y,z=secondvalue(1,2)print'x:',x,'y:',y,'z:',z可能上面的东西写的有点简 阅读全文
posted @ 2011-01-25 10:59 tqsummer 阅读(19655) 评论(2) 推荐(0)
摘要:从这篇文章开始,我就开始分享几个python oop方面的一些特点,希望对大家理解python的oop有帮助,其实python的oop相对其他的语言来说是有些地方不同的。我今天就讲下其中的一方面私有机制的问题。其他的语言,比如JAVA,C++的oop语法都比较的规范,有公有,私有和保护的数据类型,而python的话,从我目前的观察来看,python的类是没有权限控制的,所有变量都是可以被外部调用的,那你会说:"python明明有私有的定义方法就是在变量或者方法的面前加上双下滑线__,但是我告诉你,这个实际上是python的伪私有。只是一种程序员约定俗称的规定,加了就表示私有变量,但是你如果要在 阅读全文
posted @ 2011-01-25 10:35 tqsummer 阅读(1512) 评论(0) 推荐(1)
摘要:说起python重载,大家学过其他的语言比如说C#语言的话,应该知道有方法重载和运算符重载的概念,但是python重载的话,有它自己的特殊性,下面我说说自己的一点看法,希望大家踊跃拍砖。python 的重载主要包括方法重载和运算符重载。1.python 方法重载: 其他的语言一般对于方法重载的话,主要是根据参数的类型不同或者是数量不同来区分同名的方法。而python则比较特殊,它本身是动态语言,方法的参数是没有类型的,当调用传值的时候才确定参数的类型,故对参数类型不同的方法无需考虑重载。对参数数量不同的方法,则(大多数情况下)可以采用参数默认值来实现。比如你可以定义函数的默认值:def inf 阅读全文
posted @ 2011-01-25 09:22 tqsummer 阅读(9934) 评论(0) 推荐(0)
摘要:我知道的一种在python中Singleton mode的实现如下:class Foo: passdef instance(): global inst try: inst except: inst =Foo() return inst该实现的优点就是简单和直观,但缺点也同样明显:需要客户代码显式知道一个叫instance()的方法来创建该类的对象;在并发环境下这种实现并不可靠;第2点是相当严重的一个缺陷,如果你用了上面的代码,那只能祈祷不要有1个以上的实例出现(虽然几率较低,但还是有可能),否则就会出现稀奇古怪的问题。一个稍微好些实现如下:class Singleton(object): o 阅读全文
posted @ 2011-01-24 17:11 tqsummer 阅读(7466) 评论(0) 推荐(0)
摘要:先给出一个四人团对Decorator mode的定义:动态地给一个对象添加一些额外的职责。再来说说这个模式的好处:认证,权限检查,记日志,检查参数,加锁,等等等等,这些功能和系统业务无关,但又是系统所必须的,说的更明白一点,就是面向方面的编程(AOP)。AOP把与业务无关的代码十分干净的从系统中切割出来,但是Decorator mode的强大远不止于此,本文的重点在于Decorator mode在Python中的应用,所以就不再过多描述Decorator mode本身了,要想深入了解该模式,请参考四人团的经典之作《设计模式》。在Python中Decorator mode可以按照像其它编程语言如 阅读全文
posted @ 2011-01-24 17:09 tqsummer 阅读(8437) 评论(0) 推荐(0)
摘要:python中的Module是比较重要的概念。常见的情况是,事先写好一个.py文 件,在另一个文件中需要import时,将事先写好的.py文件拷贝 到当前目录,或者是在sys.path中增加事先写好的.py文件所在的目录,然后import。这样的做法,对于少数文件是可行的,但如果程序数目很 多,层级很复杂,就很吃力了。有没有办法,像Java的Package一样,将多个.py文件组织起来,以便在外部统一调用,和在内部互相调用呢?答案是有的。主要是用到python的包的概念,python __init__.py在包里起一个比较重要的作用要弄明白这个问题,首先要知道,python在执行import语 阅读全文
posted @ 2011-01-24 16:40 tqsummer 阅读(15577) 评论(4) 推荐(5)
摘要:os和os.path模块os.listdir(dirname):列出dirname下的目录和文件os.getcwd():获得当前工作目录os.curdir:返回但前目录('.')os.chdir(dirname):改变工作目录到dirnameos.path.isdir(name):判断name是不是一个目录,name不是目录就返回falseos.path.isfile(name):判断name是不是一个文件,不存在name也返回falseos.path.exists(name):判断是否存在文件或目录nameos.path.getsize(name):获得文件大小,如果name是目录返回0Lo 阅读全文
posted @ 2011-01-12 22:11 tqsummer 阅读(416) 评论(0) 推荐(0)
摘要:class LazyRules:rules_filename='plural6‐rules.txt'def __init__(self):  self.pattern_file=open(self.rules_filename,encoding='utf‐8')①  self.cache=[]rules_filename是类变量,尽管访问时和实例变量一样 。(self.rules_filename),LazyRules类的所有实例共享该变量。import plural6r1=plural6.LazyRules()r2=plural6.LazyRules()r1.rule 阅读全文
posted @ 2010-12-28 13:36 tqsummer 阅读(9337) 评论(0) 推荐(0)
摘要:在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor)。一、迭代器(iterator)在Python中,for循环可以用于Python中的任何类型,包括列表、元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration。任何这类的对象在Python中都可以用for循环或其他遍历工具迭代,迭代工具内部会在每次迭代时调用next方法,并且捕捉StopIteration异常来确 阅读全文
posted @ 2010-12-27 14:30 tqsummer 阅读(100224) 评论(6) 推荐(5)
摘要:Python里面所有的名称都是区分大小写的:变量名、函数名、类名、模块名称、异常名称。如果你可以获取它、设置它、调用它、构建它、导入它、或者抛出它,那么它就是区分大小写的。关建字(Keywords):  False class finally is return  None continue for lambda try  True def from nonlocal while  and del global not with  as elif if or yield  assert else import pass  break except in raisePython不支持内嵌赋值   阅读全文
posted @ 2010-12-15 15:37 tqsummer 阅读(1013) 评论(0) 推荐(0)