zoukankan      html  css  js  c++  java
  • python标准库学习3

    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]

    你的结果可能不一样


    ==============================================================================

    本博客已经废弃,不在维护。新博客地址:http://wenchao.ren


    我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他
    们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其
    实我是一个程序员

    ==============================================================================
  • 相关阅读:
    2021-4-20 日报博客
    2021-4-19 日报博客
    2021-4-17 周报博客
    java web
    java web
    java web
    java
    java
    周末总结8
    java web
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2131053.html
Copyright © 2011-2022 走看看