Python 标准库2, __builtin__ 模块和 exceptions 模块

__builtin__ 模块

使用 元组或字典中的参数调用参数 apple 函数

def function(a, b):
    print(a, b)
# 元组为 第 2 个参数
apple(funciton, ("whither", "canada?")
# 字典为 第 3 个参数
apple(function, ("whither"), {"b": "canada?"})

加载 __import__ 函数

from-import 其实是靠内建函数 __import__ 来工作的

import glob, os
modules = []
# 导入所有以"-plugin"结尾的模块
form module_file in glob.glob("*-plugin.py"):
    try:
        module_name, ext = os.path.splitext(os.path.basename(module_file))
        module = __import__(module_name)
        modules.append(module)
    except ImportError:
        pass
modules[0].hello()  # 调用函数

# 获取模块中的特定函数
def getfunctionbyname(module_name, function_name):
    module = __import__(module_name)
    return getattr(module, function_name)
print(repr(getfunctionbyname("dumbdbm", "open"))

# 延迟导入,如 string 模块只在第一次使用的时候导入
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)

重载 reload 函数

import hello
reload(hello)
reload(hello)

注意:重载时,它会被重新编译,新的模块会代替模块字典的老模块。但是,已经用原模块里的类建立的实例仍然使用的是老模块。

关于名称空间 dir 函数 或 vars 函数

dir 返回由给定模块、类、实例或其他类型的所有成员组成的列表。这在交互式 Python 下很有用

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

# 获取类的所有成员
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))

检测对象类型 type 函数

检查一个对象是否可调用 callable 函数

判断一个对象是否为给定类的实例 isinstance 函数 或 issubclass 函数

class A:
    pass
a = A()
if isinstance(a, A):
    print("A")

计算表达式 eval 函数

可以传入一串文本、简单的表达式,或者使用内建 Python 函数

注意:如果你不确定字符串来源的安全性,那么你在使用 eval 的时候需要注意。

print(eval("__import__('os').getcwd()")  # 
print(eval("__import__('os').remove('file')")  # 删除了某个文件
# 针对 cpu 和内存资源的攻击
eval("'*'*1000000*2*2*2*2*2*2*2")

编译和执行代码 compileexec 函数

如果要处理大块的代码,使用 compile 和 exec,代码生成工具

BODY = """
print('the ant, an introduction')
"""
code = compile(BODY,"
                    
                    

你可能感兴趣的:(Python)