python标准库学习3
2011-08-08 15:53 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]
你的结果可能不一样
==============================================================================
本博客已经废弃,不在维护。新博客地址:http://wenchao.ren
我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他
们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其
实我是一个程序员
==============================================================================
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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)
· 程序员常用高效实用工具推荐,办公效率提升利器!