python 学习笔记.
maojj
|
1#
maojj 发表于 2008-04-26 22:16
python 学习笔记.
参考:
http://wiki.woodpecker.org.cn/moin/ dive in python python documnet --------------------------------------------- Q: 怎么样在命令行下import自己写的模块? import sys sys.path.append("C:\py") import odbchelper.py note: python在sys.path这个list中找你import的module ---------------------------------------------- Q: 如何在 tuples 和 lists 之间转换? list((1,2.3)) ------------------------------------------- Q: 什么是delegation? Delegation是一个面向对象技术(也被称为一种设计模式)。假设你有个类x并想改变它的某个方法method。 你可以创建一个新类,提供这个method的一个全新实现,然后将其它method都delegate到x中相应的method。 Python程序员可以轻易地实现delegation。比如,下面这个类像一个文件一样使用,但它将所有的数据都转换成大写: 切换行号显示 1 2 class UpperOut: 3 def __init__(self, outfile): 4 self.__outfile = outfile 5 def write(self, s): 6 self.__outfile.write(s.upper()) 7 def __getattr__(self, name): 8 return getattr(self.__outfile, name) 在这里类UpperOut 重新定义了write() 方法,在调用self.outfile.write()方法之前,将字符串参数 都转换成大写。所有其它的method都delegate到self.outfile 相应的method。这个delegation通过 __getattr__ 方法来完成;关于控制属性存取的更多信息,参考 [../../doc/ref/attribute-access.html the language reference] 。 注意到更多的情况下,delegation使人产生疑惑。 若需要修改属性,还需要在类中定义__settattr__ 方法,并应小心操作。__setattr__ 的实现基本与以下一致: 切换行号显示 1 2 class X: 3 ... 4 def __setattr__(self, name, value): 5 self.__dict__[name] = value 6 ... 大多数__setattr__实现必须修改self.__dict__,用来存储自身的本地状态信息以防止无限递归。 --------------------------------------------- Q: 遍历目录 主是是os模块 C:\py> C:\py>python Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> os.getcwd() 'C:\\py' >>> os.listdir(".") ['apihelper.py', 'apihelpertest.py', 'argecho.py', 'autosize.py', 'BaseHTMLProcessor.py', 'builddialectexamples.py', 'colorize.py', 'dialect.py', 'fibonacci. py', 'fileinfo.py', 'fileinfo_fromdict.py', 'fullpath.py', 'kgp', 'kgptest.py', 'LICENSE.txt', 'makerealworddoc.py', 'odbchelper.py', 'odbchelper.pyc', 'odbc helpertest.py', 'openanything.py', 'parsephone.py', 'piglatin.py', 'plural', 'plural-rules.en', 'plural.py', 'pluraltest.py', 'pyfontify.py', 'regression.py' , 'roman', 'roman.py', 'romantest.py', 'search.py', 'soundex', 'soundex.py', 'soundextest.py', 'statsout.py', 'unicode2koi8r.py', 'urllister.py', 'zh_cn'] >>> os.chdir("zh_cn") >>> os.getcwd() 'C:\\py\\zh_cn' >>> os.listdir(os.getcwd()) ['makerealworddoc.py'] >>> os.path.isdir("makerealworddoc.py") False >>> ---------------------------------------- Q: python 递归 ---------------------------------------- Q: 用getattr()初始化一个类,怎么传到类参数? 定义一个类test class test(name): pass class = getattr(test, "test")("name") ------------------------------------------ Q: python 的全局变量,在模块间共享 参考: http://www.itpub.net/viewthread.php?tid=822939 以上的问题可以这样解决: 以下是文件:properties.py class properties(dict): def __init__(self, full_path): f = file(full_path) while True: line = f.readline() if len(line) == 0: break new_line = line.split("=") if new_line[1][-1:] == "\n": new_line[1] = new_line[1][:-1] self.__setattr__(new_line[0], new_line[1]) f.close() def get_value(self, key): return self.__getattribute__(key) def set_value(self, key, value): return self.__setattr__(key, value) def remove_key(self, key): return self.__delattr__(key) def read_file(self, full_path): print "is file full path " + full_path it = properties("test.properties") 在别的模块引用的时候: import properties properties.it.get_value("kddk") ------------------------------------- Q: socket.recv 参考: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/408859 #这个方法 如果没有接到流 就退出 #assume a socket disconnect (data returned is empty string) means all data was #done being sent. def recv_basic(the_socket): total_data=[] while True: data = the_socket.recv(8192) if not data: break total_data.append(data) return ''.join(total_data) #这个方法 如果超过时间就退出 def recv_timeout(the_socket,timeout=2): the_socket.setblocking(0) total_data=[];data='';begin=time.time() while 1: #if you got some data, then break after wait sec if total_data and time.time()-begin>timeout: break #if you got no data at all, wait a little longer elif time.time()-begin>timeout*2: break try: data=the_socket.recv(8192) if data: total_data.append(data) begin=time.time() else: time.sleep(0.1) except: pass return ''.join(total_data) |