<< >>

diveintopython.org |

Python for experienced programmers

## 2.4. `type`，`str，dir`，和其它内置函数

Python有小部分相当有用的内置函数。其它的所有函数都划分到不同的模块中去了。这一点实际上是有意识的设计决定，是为了保证核心语言避免象其它脚本语言一样变得臃肿(咳，咳，VB)。

`type` 函数返回任意对象的数据类型。可能的类型列在了 `types` 模块内。这些类型对帮助者(helper)函数有用，可以处理几种数据类型。

例 2.8. `type` 介绍

    >>> type(1)
    <type 'int'>
    >>> li = []
    >>> type(li)
    <type 'list'>
    >>> import odbchelper
    >>> type(odbchelper)
    <type 'module'>
    >>> import types
    >>> type(odbchelper) == types.ModuleType
    1

| `type` 接收任何事物，并且返回它的数据类型。我的意思是任何东西。整数，字符串，列表，字典，序列，函数，类，模块，甚至类型。
| `type` 可以接收变量并返回它的数据类型。
| `type` 也可以用于模块。
| 你可以使用 `types` 模块中的常量用来比较对象的类型。这就是 `help` 函数所做的，这一点很快会看到。

`str` 强制将数据转化为字符串。每一种数据类型都可以被转化为字符串。

例 2.9. `str` 介绍

    >>> str(1)
    '1'
    >>> horsemen = ['war', 'pestilence', 'famine']
    >>> horsemen.append('Powerbuilder')
    >>> str(horsemen)
    "['war', 'pestilence', 'famine', 'Powerbuilder']"
    >>> str(odbchelper)
    "<module 'odbchelper' from 'c:\\docbook\\dip\\py\\odbchelper.py'>"
    >>> str(None)
    'None'

| 对于象整数这样的简单类型，你会认为 `str` 可以工作，因为几乎每一种语言都有一个用来将整数据转化为字符串的函数。
| 然而 `str` 可工作于任何类型的任何对象。这里它应用于一个我们零碎构造的列表。
| `str` 也可用于模块。注意，模块的字符串表示包含了模块在磁盘上的路径，所以你的结果看上去可能不一样。
| `str` 的一个细小但很重要的行为是它可以用于 `None`，Python空值。它返回字符串 `'None'`。我们将应用这一点在 `help` 函数中来满足我们的需要，这一点我们很快会看到。

`help` 函数的核心是强大的 `dir` 函数。`dir` 返回任意一个对象的属性和方法的列表：模块，函数，字符串，列表，字典...相当多的东西。

例 2.10. `dir` 介绍

    >>> li = []
    >>> dir(li)
    ['append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
    >>> d = {}
    >>> dir(d)
    ['clear', 'copy', 'get', 'has_key', 'items', 'keys', 'setdefault', 'update', 'values']
    >>> import odbchelper
    >>> dir(odbchelper)
    ['__builtins__', '__doc__', '__file__', '__name__', 'buildConnectionString']

| `li` 是一个列表，所以 ``dir`(`li`)` 返回列表所有方法的一个列表。注意返回的列表包含着字符串表示的方法的名字，而不是方法自身。
| `d` 是一个字典，所以 ``dir`(`d`)` 返回字典方法的名字的列表。其中至少有一个方法，`keys`，应该看上去熟悉。
| 这里就是真正变得有趣的地方。`odbchelper` 是一个模块，所以 ``dir`(`odbchelper`)` 返回在模块中定义的所有东西的列表，包括内置属性，象 `__name__` 和 `__doc__`，和你定义的属性和方法其它什么的。在这个例子中，`odbchelper` 仅有一个用户自定义方法，`buildConnectionString` 函数，我们在开始了解Python中学过的。

`type`，`str`，`dir`，和所有其它的Python内置函数被组合进一个名叫 `__builtins__` 的特别模块中。(它在前后有两个下划线。)如果有帮助的话，你可以认为Python在启动时自动地执行 `from `__builtins__` import *` ，这样就导入了所有内置的函数到名字空间中，所以你可以直接使用它们。

象这样考虑的好处是，你可以通过得到 `__builtins__` 的信息，作为一个组，存取所有内置的函数和属性。猜到什么了吗？我们有一个实现那个功能的函数，它叫做 `help`。自已试一下然后现在完全忽略列表；在后面我们将深入到一些更重要的功能。(一些内置错误类，象 `AttributeError`，应该看上去已经熟悉了。)

例 2.11. 内置属性和函数

    >>> from apihelper import help
    >>> help(__builtins__, 20)
    ArithmeticError      Base class for arithmetic errors.
    AssertionError       Assertion failed.
    AttributeError       Attribute not found.
    EOFError             Read beyond end of file.
    EnvironmentError     Base class for I/O related errors.
    Exception            Common base class for all exceptions.
    FloatingPointError   Floating point operation failed.
    IOError              I/O operation failed.

    [...snip...]

Python附带了出色的参考手册，你应该十分仔细地阅读它们，学习Python所提供的所有的模块。对于大多数语言，你会发现自已要经常回头参考手册(或man文档，或上帝来帮助你，MSDN)来提醒自已如何使用这些模块，而Python大部分是自我文档化的。

进一步阅读 |

- Python Library Reference 提供了所有的内置函数 和 所有内置的异常的文档。

« 可选和定名参数 | 使用 getattr 得到对象的各种引用 »