python标准库实例详解六 python标准库常用函数

发布时间:2020-07-04编辑:脚本学堂
本节是python标准库实例学习的第六节,学习下python标准库常用函数的用法,有需要的朋友参考下。

本节内容:
pythonbiaozhunku/ target=_blank class=infotextkey>python标准库常用函数

使用 apply 函数
 

复制代码 代码示例:
def function(a, b):
    print a, b
 
apply(function, ("whither", "canada?"))
apply(function, (1, 2 + 3))
  
whither canada?
 1 5
 

使用 apply 函数传递关键字参数
 

复制代码 代码示例:
def function(a, b):
    print a, b
 
apply(function, ("crunchy", "frog"))
apply(function, ("crunchy",), {"b": "frog"})
apply(function, (), {"a": "crunchy", "b": "frog"})
 
crunchy frog
crunchy frog
crunchy frog
 

使用 apply 函数调用基类的构造函数
 

复制代码 代码示例:
class Rectangle:
    def _ _init_ _(self, color="white", width=10, height=10):
        print "create a", color, self, "sized", width, "x", height
 
class RoundedRectangle(Rectangle):
    def _ _init_ _(self, **kw):
        apply(Rectangle._ _init_ _, (self,), kw)
 
rect = Rectangle(color="green", height=100, width=100)
rect = RoundedRectangle(color="blue", height=20)
 
create a green <Rectangle instance at 8c8260> sized 100 x 100
create a blue <RoundedRectangle instance at 8c84c0> sized 10 x 20
 

使用 _ _import_ _ 函数获得特定函数
 

复制代码 代码示例:
def getfunctionbyname(module_name, function_name):
    module = _ _import_ _(module_name)
    return getattr(module, function_name)
 
print repr(getfunctionbyname("dumbdbm", "open"))
 
<function open at 794fa0>
 

使用 _ _import_ _ 函数实现 延迟导入
 

复制代码 代码示例:
class LazyImport:
    def _ _init_ _(self, module_name):
        self.module_name = module_name
        self.module = None
    def _ _getattr_ _(self, name):
        if self.module is None:
            self.module = _ _import_ _(self.module_name)
        return getattr(self.module, name)
 
string = LazyImport("string")
 
print string.lowercase
 
abcdefghijklmnopqrstuvwxyz
 

使用 dir 函数
 

复制代码 代码示例:
def dump(value):
    print value, "=>", dir(value)
 
import sys
 
dump(0)
dump(1.0)
dump(0.0j) # complex number
dump([]) # list
dump({}) # dictionary
dump("string")
dump(len) # function
dump(sys) # module
 
0 => []
1.0 => []
0j => ['conjugate', 'imag', 'real']
[] => ['append', 'count', 'extend', 'index', 'insert',
    'pop', 'remove', 'reverse', 'sort']
{} => ['clear', 'copy', 'get', 'has_key', 'items',
    'keys', 'update', 'values']
string => []
<built-in function len> => ['_ _doc_ _', '_ _name_ _', '_ _self_ _']
<module 'sys' (built-in)> => ['_ _doc_ _', '_ _name_ _',
    '_ _stderr_ _', '_ _stdin_ _', '_ _stdout_ _', 'argv',
    'builtin_module_names', 'copyright', 'dllhandle',
    'exc_info', 'exc_type', 'exec_prefix', 'executable',
...
 

使用 dir 函数查找类的所有成员
 

复制代码 代码示例:
class A:
    def a(self):
        pass
    def b(self):
        pass
 
class B(A):
    def c(self):
        pass
    def d(self):
        pass
 
def getmembers(klass, members=None):
    # get a list of all class members, ordered by class
    if members is None:
        members = []
    for k in klass._ _bases_ _:
        getmembers(k, members)
    for m in dir(klass):
        if m not in members:
            members.append(m)
    return members
 
print getmembers(A)
print getmembers(B)
print getmembers(IOError)
 
['_ _doc_ _', '_ _module_ _', 'a', 'b']
['_ _doc_ _', '_ _module_ _', 'a', 'b', 'c', 'd']
['_ _doc_ _', '_ _getitem_ _', '_ _init_ _', '_ _module_ _', '_ _str_ _']
 

使用 callable 函数
 

复制代码 代码示例:
def dump(function):
    if callable(function):
        print function, "is callable"
    else:
        print function, "is *not* callable"
 
class A:
    def method(self, value):
        return value
 
class B(A):
    def _ _call_ _(self, value):
        return value
 
a = A()
b = B()
 
dump(0) # simple objects
dump("string")
dump(callable)
dump(dump) # function
 
dump(A) # classes
dump(B)
dump(B.method)
 
dump(a) # instances
dump(b)
dump(b.method)
 
0 is *not* callable
string is *not* callable
<built-in function callable> is callable
<function dump at 8ca320> is callable
A is callable
B is callable
<unbound method A.method> is callable
<A instance at 8caa10> is *not* callable
<B instance at 8cab00> is callable
<method A.method of B instance at 8cab00> is callable
 

使用 eval 函数
 

复制代码 代码示例:
def dump(expression):
    result = eval(expression)
    print expression, "=>", result, type(result)
 
dump("1")
dump("1.0")
dump("'string'")
dump("1.0 + 2.0")
dump("'*' * 10")
dump("len('world')")
 
1 => 1 <type 'int'>
1.0 => 1.0 <type 'float'>
'string' => string <type 'string'>
1.0 + 2.0 => 3.0 <type 'float'>
'*' * 10 => ********** <type 'string'>
len('world') => 5 <type 'int'>
 

使用 eval 函数执行任意命令
 

复制代码 代码示例:
print eval("_ _import_ _('os').getcwd()")
print eval("_ _import_ _('os').remove('file')")
 
/home/fredrik/librarybook
Traceback (innermost last):
 File "builtin-eval-example-2", line 2, in ?
 File "<string>", line 0, in ?
os.error: (2, 'No such file or directory')
 

使用 compile 函数检查语法
 

复制代码 代码示例:
NAME = "script.py"
 
BODY = """
prnt 'owl-stretching time'
"""
 
try:
    compile(BODY, NAME, "exec")
except SyntaxError, v:
    print "syntax error:", v, "in", NAME
 
# syntax error: invalid syntax in script.py
 

执行已编译的代码
 

复制代码 代码示例:
BODY = """
print 'the ant, an introduction'
"""
code = compile(BODY, "<script>", "exec")
 
print code
 
exec code
 
<code object ? at 8c6be0, file "<script>", line 0>
the ant, an introduction
 

  Python 还提供了 execfile 函数, 一个从文件加载代码, 编译代码, 执行代码的快捷方式.
使用 execfile 函数
 

复制代码 代码示例:
execfile("hello.py")
 
def EXECFILE(filename, locals=None, globals=None):
    exec compile(open(filename).read(), filename, "exec") in locals, globals
 
EXECFILE("hello.py")
 
hello again, and welcome to the show
hello again, and welcome to the show
 

显式地访问 _ _builtin_ _ 模块中的函数
 

复制代码 代码示例:
def open(filename, mode="rb"):
    import _ _builtin_ _
    file = _ _builtin_ _.open(filename, mode)
    if file.read(5) not in("GIF87", "GIF89"):
        raise IOError, "not a GIF file"
    file.seek(0)
    return file
 
fp = open("samples/sample.gif")
print len(fp.read()), "bytes"
 
fp = open("samples/sample.jpg")
print len(fp.read()), "bytes"
 
3565 bytes
Traceback (innermost last):
  File "builtin-open-example-1.py", line 12, in ?
  File "builtin-open-example-1.py", line 5, in open
IOError: not a GIF file
 

使用 exceptions 模块
 

复制代码 代码示例:
# python imports this module by itself, so the following
# line isn't really needed
# python 会自动导入该模块, 所以以下这行是不必要的
# import exceptions
 
class HTTPError(Exception):
    # indicates an HTTP protocol error
    def _ _init_ _(self, url, errcode, errmsg):
        self.url = url
        self.errcode = errcode
        self.errmsg = errmsg
    def _ _str_ _(self):
        return (
            "<HTTPError for %s: %s %s>" %
            (self.url, self.errcode, self.errmsg)
            )
 
try:
    raise HTTPError("http://www.python.org/foo", 200, "Not Found")
except HTTPError, error:
    print "url", "=>", error.url
    print "errcode", "=>", error.errcode
    print "errmsg", "=>", error.errmsg
    raise # reraise exception
 
url => http://www.python.org/foo
errcode => 200
errmsg => Not Found
Traceback (innermost last):
  File "exceptions-example-1", line 16, in ?
HTTPError: <HTTPError for http://www.python.org/foo: 200 Not Found>
 

使用 os 模块重命名和删除文件
 

复制代码 代码示例:
import os
import string
 
def replace(file, search_for, replace_with):
    # replace strings in a text file
 
    back = os.path.splitext(file)[0] + ".bak"
    temp = os.path.splitext(file)[0] + ".tmp"
 
    try:
        # remove old temp file, if any
        os.remove(temp)
    except os.error:
        pass
 
    fi = open(file)
    fo = open(temp, "w")
 
    for s in fi.readlines():
        fo.write(string.replace(s, search_for, replace_with))
 
    fi.close()
    fo.close()
 
    try:
        # remove old backup file, if any
        os.remove(back)
    except os.error:
        pass
 
    # rename original to backup...
    os.rename(file, back)
 
    # ...and temporary to original
    os.rename(temp, file)
 
#
# try it out!
 
file = "samples/sample.txt"
 
replace(file, "hello", "tjena")
replace(file, "tjena", "hello")