代码改变世界

python标准库学习3

  Rollen Holt  阅读(1248)  评论(0编辑  收藏  举报
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中的一些问题:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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"

循环读文本文件:

1
2
3
4
5
6
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 ) )

复制文件的操作:

1
2
3
4
5
6
7
8
9
10
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开复制整个目录,然后删除目录

1
2
3
4
import os , shutil
print os.listdir( ".." )
shutil.copytree("../src", "../src1")
shutil.rmtree( "../src1" )

想内存文件写入内容:

1
2
3
4
5
6
7
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模块捕获输出:

1
2
3
4
5
6
7
8
9
10
11
12
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:

1
2
3
4
import cStringIO
file = cStringIO.StringIO( "asdaskdgaksdgkasdja" )
print file.getvalue()
print file.read()

小技巧:由于cStringIO比StringIO的效率高一点,但是兼容性不行,所以可以使用下面的语句:

1
2
3
4
5
6
7
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 )
    

对字典使用“+”法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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}

实例类似一个普通的列表对象, 但它允许你通过赋值为列表添加项目.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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]

随机数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)

随机打乱序列的顺序:

1
2
3
4
5
6
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]

你的结果可能不一样

编辑推荐:
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
· 程序员常用高效实用工具推荐,办公效率提升利器!
点击右上角即可分享
微信分享提示