<< >>

diveintopython.org |

Python for experienced programmers

## 2.10. 小结

`apihelper.py` 程序和它的输出现在应该非常清楚了。

例 2.30. `apihelper.py`

    from types import BuiltinFunctionType, BuiltinMethodType, \
        FunctionType, MethodType, ClassType

    def help(object, spacing=10, collapse=1):
        """Print methods and doc strings.

        Takes module, class, list, dictionary, or string."""
        typeList = (BuiltinFunctionType, BuiltinMethodType, FunctionType, MethodType, ClassType)
        methodList = [method for method in dir(object) if type(getattr(object, method)) in typeList]
        processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
        print "\n".join(["%s %s" %
                          (method.ljust(spacing),
                           processFunc(str(getattr(object, method).__doc__))
                         for method in methodList])

    if __name__ == "__main__":
        print help.__doc__

例 2.31. `apihelper.py` 的输出

    >>> from apihelper import help
    >>> li = []
    >>> help(li)
    append     L.append(object) -- append object to end
    count      L.count(value) -> integer -- return number of occurrences of value
    extend     L.extend(list) -- extend list by appending list elements
    index      L.index(value) -> integer -- return index of first occurrence of value
    insert     L.insert(index, object) -- insert object before index
    pop        L.pop([index]) -> item -- remove and return item at index (default last)
    remove     L.remove(value) -- remove first occurrence of value
    reverse    L.reverse() -- reverse *IN PLACE*
    sort       L.sort([cmpfunc]) -- sort *IN PLACE*; if given, cmpfunc(x, y) -> -1, 0, 1

在研究下一章之前，确保你可以无困难地完成下面的事情：

- 或者用`import module`或者用`from module import`导入模块
- 用可选和定名参数定义和调用函数
- 使用 `str` 来强制将任一值转换为字符串表达
- 使用 `getattr` 动态得到函数和其它什么的引用
- 扩展列表映射语法来进行列表过滤
- 考虑`and-or` 技巧和安全使用它
- 定义`lambda` 函数
- 将函数赋值给变量然后通过引用变量调用函数。我强调的已经够多了：这种思考方式对于提高你对Python的理解力至关重要。从这书中你会随处可见这种技术的更复杂的应用。

« 全部放在一起 | 面向对象框架 »