论坛首页 编程语言技术论坛

Python Tutorial 笔记4

浏览 2860 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-01   最后修改:2009-03-02

Standard Library

Library Name Usage Sample
os 提供一些类似于Shell的操作
>>> import os
>>> os.system('time 0:02')
0
>>> os.getcwd()      # Return the current working directory
'C:\\Python30'
>>> os.chdir('/server/accesslogs')
 
shutil 文件和目录管理
>>> import shutil
>>> shutil.copyfile('data.db', 'archive.db')
>>> shutil.move('/build/executables', 'installdir')
 
glob 支持通配符的文件搜索
>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']
 

sys.argv

getopt

optparse

输入参数  
re 正则表达式 
>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'
 
random 随机函数
>>> import random
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10)   # sampling without replacement
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random()    # random float
0.17970987693706186
>>> random.randrange(6)    # random integer chosen from range(6)
4
 
datetime 日期时间
# dates are easily constructed and formatted
>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2003, 12, 2)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'

# dates support calendar arithmetic
>>> birthday = date(2005, 3, 6)
>>> age = now - birthday
>>> age.days
14368
 

zlib

gzip

bz2          

tarfile

zipfile     

压缩解压缩   
>>> import zlib
>>> s = 'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37
>>> zlib.decompress(t)
'witch which has which witches wrist watch'
>>> zlib.crc32(s)
226805979
 
timeit 测量时间
>>> from timeit import Timer
>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
0.57535828626024577
>>> Timer('a,b = b,a', 'a=1; b=2').timeit()
0.54962537085770791
 
unittest 单元测试
import unittest

class TestStatisticalFunctions(unittest.TestCase):

    def test_average(self):
        self.assertEqual(average([20, 30, 70]), 40.0)
        self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
        self.assertRaises(ZeroDivisionError, average, [])
        self.assertRaises(TypeError, average, 20, 30, 70)

unittest.main() # Calling from the command line invokes all tests
 
Template 模板替换
>>> t = Template('${village} folk send $$10 to $cause')
>>> t.safe_substitute(village='nottingham', cause='the ditch fund')
'village folk send $10 to the ditch fund'
 
MultiThread 多线程
import threading, zipfile

class AsyncZip(threading.Thread):
    def __init__(self, infile, outfile):
        threading.Thread.__init__(self)
        self.infile = infile
        self.outfile = outfile
    def run(self):
        f = zipfile.ZipFile(self.outfile, 'w', zipfile.ZIP_DEFLATED)
        f.write(self.infile)
        f.close()
        print('Finished background zip of:', self.infile)

background = AsyncZip('mydata.txt', 'myarchive.zip')
background.start()
print('The main program continues to run in foreground.')

background.join()    # Wait for the background task to finish
print('Main program waited until background was done.')
 
Logging 日志
import logging
logging.debug('Debugging information')
logging.info('Informational message')
logging.warning('Warning:config file %s not found', 'server.conf')
logging.error('Error occurred')
logging.critical('Critical error -- shutting down')

WARNING:root:Warning:config file server.conf not found
ERROR:root:Error occurred
CRITICAL:root:Critical error -- shutting down
 
Weak References 弱指针
import gc
import weakref
class Value:
    def __init__(self, value=0):
        self.value = value
    def __repr__(self):
        return str(self.value)

if __name__ == '__main__':
    d = {}
    v = Value(10)
    d['myvalue'] = v
    del v
    gc.collect()
    print(d['myvalue'])

    e = weakref.WeakValueDictionary()
    v = Value(11)
    e['myvalue'] = v
    del v
    gc.collect()
    print(e['myvalue'])
 

array

deque

bisect

heapq

容器  
decimal 精确计算
>>> Decimal('1.00') % Decimal('.10')
Decimal("0.00")
>>> 1.00 % 0.10
0.09999999999999995

>>> sum([Decimal('0.1')]*10) == Decimal('1.0')
True
>>> sum([0.1]*10) == 1.0
False
>>> getcontext().prec = 36
>>> Decimal(1) / Decimal(7)
Decimal("0.142857142857142857142857142857142857")
 
     

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics