Python标准库---七、内置函数(V-W-X-Y-Z)

上一篇文章: Python标准库---六、内置函数(P-K-R-S-T-U)
下一篇文章: Python标准库---八、内置常量

内置函数:

clipboard.png

67. vars([object])

返回模块、类、实例或任何其它具备 dict 属性的对象的 dict 属性。

模块和实例这样的对象具备可更新的 dict 属性;可是,其它对象的 dict 属性可能会设为限制写入(例如,类会使用 types.MappingProxyType 来防止直接更新字典)。编程

不带参数时,vars() 的行为相似 locals()。 请注意,locals 字典仅对于读取起做用,由于对 locals 字典的更新会被忽略。segmentfault

68. zip(*iterables)

建立一个聚合了来自每一个可迭代对象中的元素的迭代器。

返回一个元组的迭代器,其中的第 i 个元组包含来自每一个参数序列或可迭代对象的第 i 个元素。 当所输入可迭代对象中最短的一个被耗尽时,迭代器将中止迭代。 当只有一个可迭代对象参数时,它将返回一个单元组的迭代器。 不带参数时,它将返回一个空迭代器。 至关于:app

def zip(*iterables):
    # zip('ABCD', 'xy') --> Ax By
    rr = object()
    iterators = [iter(it) for it in iterables]
    while iterators:
        result = []
        for it in iterators:
            elem = next(it, sentinel)
            if elem is sentinel:
                return
            result.append(elem)
        yield tuple(result)
函数会保证可迭代对象按从左至右的顺序被求值。 使得能够经过 zip( [iter(s)]n) 这样的惯用形式将一系列数据聚类为长度为 n 的分组。 这将重复 一样的 迭代器 n 次,以便每一个输出的元组具备第 n 次调用该迭代器的结果。 它的做用效果就是将输入拆分为长度为 n 的数据块。

当你不用关心较长可迭代对象末尾不匹配的值时,则 zip() 只须使用长度不相等的输入便可。 若是那些值很重要,则应改用 itertools.zip_longest()。函数

zip() 与 * 运算符相结合能够用来拆解一个列表:ui

>>>
>>> x = [1, 2, 3]
>>> y = [4, 5, 6]
>>> zipped = zip(x, y)
>>> list(zipped)
[(1, 4), (2, 5), (3, 6)]
>>> x2, y2 = zip(*zip(x, y))
>>> x == list(x2) and y == list(y2)
True

69. __import__(name, globals=None, locals=None, fromlist=(), level=0)

注解 与 importlib.import_module() 不一样,这是一个平常 Python 编程中不须要用到的高级函数。
此函数会由 import 语句发起调用。 它能够被替换 (经过导入 builtins 模块并赋值给 builtins.__import__) 以便修改 import 语句的语义,可是 强烈 不建议这样作,由于使用导入钩子 (参见 PEP 302) 一般更容易实现一样的目标,而且不会致使代码问题,由于许多代码都会假定所用的是默认实现。 一样也不建议直接使用 __import__() 而应该用 importlib.import_module()。

该函数会导入 name 模块,有可能使用给定的 globals 和 locals 来肯定如何在包的上下文中解读名称。 fromlist 给出了应该从由 name 指定的模块导入对象或子模块的名称。 标准实现彻底不使用其 locals 参数,而仅使用 globals 参数来肯定 import 语句的包上下文。spa

level 指定是使用绝对仍是相对导入。 0 (默认值) 意味着仅执行绝对导入。 level 为正数值表示相对于模块调用 __import__() 的目录,将要搜索的父目录层数 (详情参见 PEP 328)。code

当 name 变量的形式为 package.module 时,一般将会返回最高层级的包(第一个点号以前的名称),而 不是 以 name 命名的模块。 可是,当给出了非空的 fromlist 参数时,则将返回以 name 命名的模块。对象

例如,语句 import spam 的结果将为与如下代码做用相同的字节码:ip

spam = __import__('spam', globals(), locals(), [], 0)
语句 import spam.ham 的结果将为如下调用:
spam = __import__('spam.ham', globals(), locals(), [], 0)
请注意在这里 __import__() 是如何返回顶层模块的,由于这是经过 import 语句被绑定到特定名称的对象。

另外一方面,语句 from spam.ham import eggs, sausage as saus 的结果将为get

_temp = __import__('spam.ham', globals(), locals(), ['eggs', 'sausage'], 0)
eggs = _temp.eggs
saus = _temp.sausage
在这里, spam.ham 模块会由 __import__() 返回。 要导入的对象将今后对象中提取并赋值给它们对应的名称。

若是您只想按名称导入模块(可能在包中),请使用 importlib.import_module()

在 3.3 版更改: Negative values for level are no longer supported (which also changes the default value to 0).

脚注
解析器只接受 Unix 风格的行结束符。若是您从文件中读取代码,请确保用换行符转换模式转换 Windows 或 Mac 风格的换行符。

上一篇文章: Python标准库---六、内置函数(P-K-R-S-T-U)
下一篇文章: Python标准库---八、内置常量
相关文章
相关标签/搜索