import operator sequence = 1, 2, 4 print "add", "=>", reduce(operator.add, sequence) print "sub", "=>", reduce(operator.sub, sequence) print "mul", "=>", reduce(operator.mul, sequence) print "concat", "=>", operator.concat("spam", "egg") print "repeat", "=>", operator.repeat("spam", 5) print "getitem", "=>", operator.getitem(sequence, 2) print "indexOf", "=>", operator.indexOf(sequence, 2) print "sequenceIncludes", "=>", operator.sequenceIncludes(sequence, 3)
add => 7
sub => -5
mul => 8
concat => spamegg
repeat => spamspamspamspamspam
getitem => 4
indexOf => 1
sequenceIncludes => False
注意copy中的一些问题:
import copy a = [[1], [2], [3]] b = copy.copy( a ) print "before", "=>" print a print b # modify original a[0][0] = 0 a[1] = None print "after", "=>" print a print b
输出的结果是:
before =>
[[1], [2], [3]]
[[1], [2], [3]]
after =>
[[0], None, [3]]
[[0], [2], [3]]
测量算法的运行时间:
import time def procedure(): time.sleep( 2.5 ) # measure process time t0 = time.clock() procedure() print time.clock() - t0, "seconds process time" # measure wall time t0 = time.time() procedure() print time.time() - t0, "seconds wall time"
循环读文本文件:
import fileinput import sys for line in fileinput.input( "../src/hello.xml" ): sys.stdout.write( "-> " ) sys.stdout.write( line )
import fileinput import glob import string, sys for line in fileinput.input( glob.glob( "../src/hello.xml" ) ): if fileinput.isfirstline(): # first in a file? sys.stderr.write( "-- reading %s --\n" % fileinput.filename() ) sys.stdout.write( str( fileinput.lineno() ) + " " + string.upper( line ) )
复制文件的操作:
import os , shutil print os.listdir( "../src" ) for file in os.listdir( "../src" ): if os.path.splitext( file )[1] == ".py": os.mkdir( "../src/back" ) print file shutil.copy( file, os.path.join( "back", file ) )
可以使用shutil开复制整个目录,然后删除目录
import os , shutil print os.listdir( ".." ) shutil.copytree("../src", "../src1") shutil.rmtree( "../src1" )
想内存文件写入内容:
import StringIO file = StringIO.StringIO() file.write( "This man is no ordinary man. " ) file.write( "This is Mr. F. G. Superman." ) print file.getvalue()
使用StringIO模块捕获输出:
import StringIO import string, sys stdout = sys.stdout sys.stdout = file = StringIO.StringIO() print """a""" sys.stdout = stdout print string.upper( file.getvalue() )
结果输出A
也可以使用cStringIO:
import cStringIO file = cStringIO.StringIO( "asdaskdgaksdgkasdja" ) print file.getvalue() print file.read()
小技巧:由于cStringIO比StringIO的效率高一点,但是兼容性不行,所以可以使用下面的语句:
try: import cStringIO StringIO = cStringIO except ImportError: import StringIO print StringIO
类继承的时候构造函数的一点点问题:
class A: def __init__( self ): pass class B( A ): def __init__( self ): #A.__init__( self ) super( B, self ).__init__( self )
对字典使用“+”法
import UserDict class Add( UserDict.UserDict ): def __init__( self, dict = {}, **kwargs ): UserDict.UserDict.__init__( self ) self.update( dict ) self.update( kwargs ) def __add__( self, other ): dict = Add( self.data ) dict.update( other ) return dict a = Add( a = 1 ) b = Add( b = 2 ) print a + b
输出的结果为:{'a': 1, 'b': 2}
实例类似一个普通的列表对象, 但它允许你通过赋值为列表添加项目.
import UserList class AutoList( UserList.UserList ): def __init__( self ): super( AutoList, self ).__init__( self ) def __setitem__( self, i, item ): if i == len( self.data ): self.append( item ) else: self.data[i] = item list = AutoList() for i in range( 10 ): list[i] = i print list
输出的结果为:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
随机数:
import random for i in range(5): # random float: 0.0 <= number < 1.0 print random.random(), # random float: 10 <= number < 20 print random.uniform(10, 20), # random integer: 100 <= number <= 1000 print random.randint(100, 1000), # random integer: even numbers in 100 <= number < 1000 print random.randrange(100, 1000, 2)
随机打乱序列的顺序:
import random
a = range( 10 )
print a
random.shuffle( a )
print a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[5, 2, 6, 9, 4, 7, 3, 8, 0, 1]
你的结果可能不一样