python运算符与表达式

1.1. 数值操作 所有数值类型都提供下列运算: 运算 描述 x + y 加 x - y 减 x * y 乘 x / y 常规除 x // y 地板除 x ** y 乘方 (xy ) x % y 取模 (x mod y ) -x 改变操作数的符号位 +x 什么也不做 ~x ~x=-(x+1) 关于常规除 / 与地板除 //: 地板除在任何时候都会将小数部分舍为0,而常规除的行为依操作数的类型而有不同。 常规除 / : 整数除以整数时 / 与 // 除完全相同,商都会被舍去小数部分而返回一个整数。如7 / 4 的结果是 1,而不是1.75; 如果有一个操作数为浮点数,情形就不同了: 对于 / ,会返回一个双精度浮点数 对于 //,也会返回一个双精度浮点数,只不过小数部分被舍弃 取模操作返回 x/y 的余数,如7 % 4是3。对于浮点数,取模操作返回的是x - int(x / y ) * y。 对于复数,取模操作返回x - int((x / y )....

2010-03-08 · 8 分钟 · admin

psyco 真的很神奇

测试代码 http://www.timestretch.com/FractalBenchmark.html#e7142f2f73f8eb4245f1b25aa6340470 没有使用 psyco 3.4 左右,生成 pyc 3.14 ,用了 psyco 0.34 真是太强大了, freebsd 安装 psyco cd /usr/ports/devel/py-psyco make install clean 开启 import psyco psyco.full()

2009-12-19 · 1 分钟 · admin

freebsd下python程序打包工具 ── cx_Freeze

cx_Freeze是一个类似py2exe的工具,它们区别是py2exe是将python程序打包成windows下可以执行的exe文件的,而cx_Freeze则是将python程序打包为linux下可以直接执行的ELF格式的二进制可执行文件(看说明好像也能生成windows的可执行文件,号称跨平台)。 cx_Freeze的作用就是让你的python程序可以脱离python运行环境,在没有安装python的微型linux系统(例如cdlinux、tinycore等)里,方便地运行你的python程序。从功能上来说,也可以将其理解为一个python程序的编译器,将你的源码隐藏起来。 安装 cd /usr/ports/devel/cx_Freeze make install clean 打包程序 cxfreeze 你的程序文件.py --target-dir dist

2009-12-04 · 1 分钟 · admin

Python date测试

import datetime, calendar today = datetime.date.today() oneday = datetime.timedelta(days=1) # loop back to most recent Friday (could be today) # takes care of end of month and even leap years friday = today while friday.weekday() != calendar.FRIDAY: friday -=oneday oneweek = datetime.timedelta(days=7) nextweek = today + oneweek nextyear = today.replace(year=today.year+1) print "Today (year-month-day) = ", today print "Most recent Friday = ", friday print "One week from today = ", nextweek print "One year from today = ", nextyear print "Current time = ", datetime....

2009-12-04 · 2 分钟 · admin

當Deferred遇上Thread

當Deferred遇上Thread Deferred不會自動實現將阻塞過程轉為非阻塞過程,雖然它已經有那樣的機制但還是要你去多走一步。要將阻塞過程轉為真正的非阻塞過程,那 只有借用線程。但至於線程調用你不用太擔心,twisted已為你準備好一個方便的用法。就是將Deferred綁在Thread上,這樣就有了deferToThread,味道不比牛奶加巧克力差。 deferToThread在twisted文檔的說明,洋墨水喝得比較少,就不照字面翻譯了。大概意思是將函數f放在線程裡並作為Deferred返回,args和kwargs是函數f的參數。也就是使用deferToThread返回的是一個帶線程的Deferred,並自動使用callback調用指定的函數f。相當於在線程中運行下面的代碼 d=defer.Deferred().addCallback(f) d.callback(result) def deferToThread(f, *args, **kwargs): (source) Run a function in a thread and return the result as a Deferred. Parameters f The function to call. *args positional arguments to pass to f. **kwargs keyword arguments to pass to f. Returns A Deferred which fires a callback with the result of f, or an errback with a twisted.python.failure.Failure if f throws an exception. #!/usr/bin/env python #coding=utf-8 from twisted....

2009-12-04 · 1 分钟 · admin

Deferred筆記一

Deferred的簡單套路 從twisted的文檔入手,將Deferred獨立出來簡單的說明作用與使用方法,這樣更能快速對Deferred有深刻的了解。 一、學習資料 1、主要參考資料 官方文檔 http://twistedmatrix.com/projects/core/documentation/howto/deferredindepth.html 關聯譯文 http://wiki.woodpecker.org.cn/moin/twistedTUT00?action=AttachFile&do;=get⌖=deferred_tutorial.html(此鏈接將會下載離線文檔) 2、關聯資源 http://wiki.woodpecker.org.cn/moin/TwistedTUT 二、Deferred的作用 Deferred的主要作用可以用一句話比較形象說明,“不要打電話給我,我會打給你的(Don’t Call Us, We’ll Call You)”。相當於做好計劃後,執行交給Deferred,完成後再找我,我可要到一邊Happy去了。 它會根據callback運行結果(正常、發生例外)從callback鏈表中選擇執行已註冊的相應的callback函數,從而實現事件方式來驅動程序。 callback的運行不影響主程序的運行,Deferred.callback執行後馬上返回。(這點有待在後面證明) 三、Deferred實例 from twisted.internet import defer d=defer.Deferred() 實例化後就可以對Deferred進行操作。 四、callback鏈表 鏈表是用來放置callback函數,鏈表中的函數可以響應三類事件,正常結束、例外結束、任意(包括前面兩者),它們分別用addCallback、addErrback、addBoth註冊到鏈表中。也就是說函數正常結束返回調用addCallback註冊的函數,發生例外則調用addErrback註冊的函數,使用addBoth註冊的函數無論返回什 結果都會被調用。 五、callback函數註冊 除了上面提過的addCallback、addErrback、addBoth三個註冊函數外,還有另外一個addCallbacks可以同時註冊處理正常結束和例外結束的函數。 1 2 3 4 5 6 def deferredExample(): d = defer.Deferred() d.addCallback(failAtHandlingResult) d.addCallbacks(yesDecision, noDecisionPassthru) d.addCallback(handleResult) # - A - d.addErrback(handleFailure) 上面代碼中第4行的addCallbacks效果如同 d.addCallback(yesDecision) d.addErrback(noDecisionPassthru) 另外,我們也可以將註冊過程寫成下面形式。 d=refer.Deferred().addCallback(failAtHandlingResult).addCallbacks(yesDecision, noDecisionPassthru).addCallback(handleResult).addErrback(handleFailure) 六、callback鏈執行順序 Deferred的鏈表是按順序從第一個註冊函數開始直到最後一個函數。如果發生例外時,有多個例外處理函數,則會調用發生例外函數下面第一個例外處理函數。後面的例外處理函數將不會被調用,除非第一個例外處理函數將這個例外向下傳遞。 七、其它一些特性 Deferred實例中還有另外一些函數,如pause,unpause,setTimeout,timeoutCall,chainDeferred,這些將留作下一步的測試。 另外還沒涉及到的是Deferred上一級的defer庫中的函數及其它類的使用,從一些代碼看來這些函數將會進一步有利於Deferred的應用,但這也有待後面的進上步學習。 八、總結 經過Deferred are beautiful一節學習,了解Deferred的使用方法及其事件響應機制。 創建於2009年8月31日 原文 http://sites.google.com/site/mypynotes/twisted-1/deferred 可以被gw了

2009-12-04 · 1 分钟 · admin

Python 语法运用

u=[“a”,“b”,“c”] l = [“name=%s” % user for user in u ] 结果: [“name=a”, “name=b”,“name=c”] l ={“a”:1,“b”:2,“c”:3} [k for k,v in l.items()] 结果: [“a”,“b”,“c”] l ={“a”:1,“b”:2,“c”:3} ["%s=%s" % (k,v) for k,v in l.items()] [“a=1”,“b=2”,“c=3”] 2.lambda lambda 是预代理,代替要生成方法的指针,我这样理解的 d.addCallback(lambda m: "status of %s : %s" % (msg,m)) d.addCallback(lambda m: self.msg(user,m)) 3.文件的操作 这是方指的是txt文件操作 注意路径只能是 / 的方式处理, 打开的模式,你可以采用 help(file)的方式来查. f = file(“c:/tmp/abc.txt”,“r”) for line in f: user,status = line.split(":",1) user = user.strip() status = status....

2009-12-03 · 1 分钟 · admin

python的dict,set,list,tuple应用

字典(dict) dict 用 {} 包围 dict.keys(),dict.values(),dict.items() hash(obj)返回obj的哈希值,如果返回表示可以作为dict的key del 或 dict.pop可以删除一个item,clear清除所有的内容 sorted(dict)可以吧dict排序 dict.get()可以查找没存在的key,dict.[]不可以 dict.setdefault() 检查字典中是否含有某键。 如果字典中这个键存在,你可以取到它的值。 如果所找的键在字典中不存在,你可以给这个键赋默认值并返回此值。 {}.fromkeys()创建一个dict,例如: {}.fromkeys((’love’, ‘honor’), True) =>{’love’: True, ‘honor’: True} 不允许一个键对应多个值 键值必须是哈希的,用hash()测试 一个对象,如果实现hash()方法可以作为键值使用 集合(set) 集合是一个数学概念,用set()创建 set.add(),set.update.set.remove,添加更新删除,-= 可以做set减法 set.discard 和 set.remove不同在于如果删除的元素不在集合内,discard不报错,remove 报错 < <= 表示 子集,> >=表示超集 | 表示联合 & 表示交集 - 表示差集 ^ 差分集里啊 列表(list) 列表是序列对象,可包含任意的Python数据信息,如字符串、数字、列表、元组等。列表的数据是可变的,我们可通过对象方法对列表中的数据进行增加、修改、删除等操作。可以通过list(seq)函数把一个序列类型转换成一个列表。 append(x) 在列表尾部追加单个对象x。使用多个参数会引起异常。 count(x) 返回对象x在列表中出现的次数。 extend(L) 将列表L中的表项添加到列表中。返回None。 Index(x) 返回列表中匹配对象x的第一个列表项的索引。无匹配元素时产生异常。 insert(i,x) 在索引为i的元素前插入对象x。如list.insert(0,x)在第一项前插入对象。返回None。 pop(x) 删除列表中索引为x的表项,并返回该表项的值。若未指定索引,pop返回列表最后一项。 remove(x) 删除列表中匹配对象x的第一个元素。匹配元素时产生异常。返回None。 reverse() 颠倒列表元素的顺序。 sort() 对列表排序,返回none。bisect模块可用于排序列表项的添加和删除。 元组(tuple) tuple=(1,),这是单个元素的元组表示,需加额外的逗号。 tuple=1,2,3,4,这也可以是一个元组,在不使用圆括号而不会导致混淆时,Python允许不使用圆括号的元组。 和列表一样,可对元组进行索引、分片、连接和重复。也可用len()求元组长度。...

2009-12-03 · 1 分钟 · admin

Deferred Object In Twisted

Twisted uses the Deferred object to manage the callback sequence. The client application attaches a series of functions to the deferred to be called in order when the results of the asychronous request are available(this series of functions is known as a series of callbacks, or a callback chain), together with a series of functions to be called if there is an error in the asychronous request(known as a series of errbacks or an errback chain)....

2009-12-03 · 6 分钟 · admin

Python 类型

1.Dictionry {} 相录于一个 key value的内容 mys={“a”:1,“b”:2,“c”:3} mys[“a”] = 1 mys.keys() mys.values() for k,v in mys.items(): print k,v 2.List 是一个列表 [] mys=[“a”,“b”,1] mys[0] mys[1] mys[-1] for v in mys: print v; Tuple 一个不能改变的list () mys=(1,2,“a”) mys[0] mys[1] for v in mys: print v; 这三种类型可以完全结合 mys=[(2,3),(4,5),(“a”,“b”)] mys={“a”:[2,3,4],“b”:[3,4,5]} mys[“a”].pop() 可以这样的写。

2009-12-03 · 1 分钟 · admin

进程信号

转载:http://blog.csdn.net/ljx0305/archive/2008/09/09/2904056.aspx SIGHUP 终止进程 终端线路挂断 SIGINT 终止进程 中断进程 SIGQUIT 建立CORE文件终止进程,并且生成core文件 SIGILL 建立CORE文件 非法指令 SIGTRAP 建立CORE文件 跟踪自陷 SIGBUS 建立CORE文件 总线错误 SIGSEGV 建立CORE文件 段非法错误 SIGFPE 建立CORE文件 浮点异常 SIGIOT 建立CORE文件 执行I/O自陷 SIGKILL 终止进程 杀死进程 SIGPIPE 终止进程 向一个没有读进程的管道写数据 SIGALARM 终止进程 计时器到时 SIGTERM 终止进程 软件终止信号 SIGSTOP 停止进程 非终端来的停止信号 SIGTSTP 停止进程 终端来的停止信号 SIGCONT 忽略信号 继续执行一个停止的进程 SIGURG 忽略信号 I/O紧急信号 SIGIO 忽略信号 描述符上可以进行I/O SIGCHLD 忽略信号 当子进程停止或退出时通知父进程 SIGTTOU 停止进程 后台进程写终端 SIGTTIN 停止进程 后台进程读终端 SIGXGPU 终止进程 CPU时限超时 SIGXFSZ 终止进程 文件长度过长 SIGWINCH 忽略信号 窗口大小发生变化 SIGPROF 终止进程 统计分布图用计时器到时 SIGUSR1 终止进程 用户定义信号1 SIGUSR2 终止进程 用户定义信号2 SIGVTALRM 终止进程 虚拟计时器到时...

2009-11-30 · 1 分钟 · admin

用Python写简单守护进程【转】

[转载自]http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/ I’ve written a simple Python class for creating daemons on unix/linux systems. It was pieced together for various other examples, mostly corrections to various Python Cookbook articles and a couple of examples posted to the Python mailing lists. It has support for a pidfile to keep track of the process. I hope it’s useful to someone. Below is the Daemon class. To use it, simply subclass it and implement the run() method....

2009-11-28 · 3 分钟 · admin

Django and Memcached

just ran into several problems while setting up memcached for a django installation, that is replicated over several servers. One of the problems was the compiling of cmemcache, a python extension for libmemcache, where I received the following error: ‘CmemcacheObject’ has no member named ‘mc_ctxt’ First I didn’t realized the additional file, that resides at the file list of downloadable cmemcache versions. With this file you can patch the libmemcache library so cmemcache can be build....

2009-11-28 · 3 分钟 · admin

一个典型的Twisted应用程序框架

一、简介 本文通过继承Twisted中的一些类实现了一个基本的Twisted应用程序,期间实现了协议、工厂并进行了服务器的监听,并将日志输出的屏幕。 二、基本框架 ·导入部分 这部分导入的内容是专供协议和工厂类使用的,其他部分的导入可能并不在同一模块当中,所以到了具体的代码部分再去导入。 from twisted.internet import protocol from twisted.protocols import basic ·协议 继承了一个LineReceiver,实现了行和原始两种方式的数据接收处理,还重载了连接的建立和断开事件。 class ConfigServer(basic.LineReceiver): def __init__(self): pass #by gashero def dataReceived(self,data): pass def lineReceived(self,line): pass def connectionMade(self): pass def connectionLost(self,reason): pass ·工厂 继承了一个服务器工厂, class ConfigServerFactory(protocol.ServerFactory): protocol=ConfigServer def __init__(self): pass def startFactory(self): pass def stopFactory(self): pass def buildProtocol(self,addr): protocol.ServerFactory.buildProtocol(self,addr) pass ·设置日志 from twisted.python import log import sys log.startLogging(sys.stdout) ·启动服务器 from twisted.internet import reactor reactor.listenTCP(8080,ConfigServerFactory(),timeout=10) reactor.run() 三、其他常用方法 ·发送数据,在协议对象的方法中 self.transport.write(data)...

2009-10-27 · 1 分钟 · admin

twisted知识

一、Twisted基本模型 Twisted 网络编程框架是一种基于事件的网络编程框架,用户需要继承特定的类,并重载其中的方法来处理网络通信 中可能出现的各种情况。 Twisted的网络通信模型 最基本的也要由三部分组成:反应器(reactor)、协议(protocol)、工厂(factory)。 1、其中反应器reactor用来执行事件循环,分发事件处理等 等,每个应用程序中一般只能启动一个reactor。 2、协议用来完成与一个已经连接成功的主机的交互功能,主要有数据的接收和发送功能。连接的断开事件也可以在这 里处理。注意是在连接建立之后protacal才开始负责下面的工作的。 3、工厂负责与一个协议的启动和关闭功能,而且还负责在连接成功时生成一个协议对象,(by gashero)用于与远程主 机的交互功能。 一个典型的Twisted应用程序会建立至少一个协议,可以从twisted.internet.protocol.BaseProtocol类或其子类继承 。协议还需要实现数据的接收处理,即收到数据之后需要做出何种响应。比较简单的Twisted应用程序可以继承一个空 的工厂,来自 twisted.internet.protocol.Factory或其子类。工厂至少应该指定protocol属性,指向协议类。最后 就是要启动事件 循环,根据连接方向的不同,可以选择用reactor的connectXXX()或listenXXX()方法,然后执行 reactor.run()启动 事件循环。 二、协议模型 所有协议类的基类是 twisted.internet.protocol.BaseProtocol,但是一般使用其子类。不同的协议子类提供了不同 的数据接收方法,如 LineReceiver子类就允许同时使用行和原始数据两种方法接收数据,使用非常方便。 BaseProtocol的接口如下: class BaseProtocol: connected=0 #是否已经连接了 transport=None #用于数据发送的传输对象 def makeConnection(self,transport): #建立连接的方法,不是事件方法,一般不要重载 def connectionMade(self): #连接成功事件,可重载 可以看到BaseProtocol可以理解为一个虚基类,实现的功能十分简陋。实际的应用程序一般也不是直接继承BaseProtocol来实现协议,而是继承Protocol类。Protocol类提供了基本完善的协议功能,接口定义如下: class Protocol(BaseProtocol): def dataReceived(self,data): #接收到数据事件,可重载 def connectionLost(self,reason=connectionDone): #连接断开事件,可重载,依靠reason区分断开类型 从Protocol类继承就可以完成协议的基本处理了,包括连接的建立和断开事件,还有数据接收事件。 三、工厂模型 相对于协议,工厂可以发挥的空间就很小了。所有工厂的基类是twisted.internet.protocol.Factory。这个类定义了三个方法,接口如下: class Factory: protocol=None #指向一个协议类 def startFactory(self): #开启工厂 def stopFactory(self): #关闭工厂 def buildProtocol(self,addr): #构造协议对象,并给协议对象添加一个factory属性指向工厂,可以重载 从 这里可以看到,工厂类中最重要的部分就是protocol属性,将这个属性设置为一个协议类(注意不是协议对象),就 可以将这个工厂设置为对应协议的工厂 了。前两个方法控制工厂的开启和关闭,用于资源的初始化和释放,可以重载 。buildProtocol()方法可以控制协议对象的生成,(by gashero)如果需要多传递一个属性,可以重载,但是重载时应...

2009-10-23 · 1 分钟 · admin