Python的程序结构[5] -> 模块/Module[0] -> 内建模块 builtins
builtins 内建模块 / builtins Module
在Python的模块中,有一种特殊模块,无需导入便可以使用,其中包含了许多内建函数与类。
builtins 模块内容 / builtins Content
通过对 builtins 模块的导入(也可使用 __builtins__ 代替),可以利用 pdir 模块查看内部的函数与类及异常等。
pdir 模块是一个用于查看模块内部所有函数、类等信息的模块,安装方式为:
pip install pdir2
具体使用方式也十分简单,
1 import builtins 2 import pdir 3 # Or print(pdir(__builtins__)) 4 print(pdir(builtins))
最终输出如下,可以看到 builtins 模块中包含了所有的内置变量或函数等。
module attribute: __loader__, __name__, __package__, __spec__ other: Ellipsis, False, None, NotImplemented, True, __debug__, copyright, credits, exit, help, license, quit special attribute: __doc__ class: BaseException: Common base class for all exceptions GeneratorExit: Request that a generator exit. KeyboardInterrupt: Program interrupted by user. SystemExit: Request to exit from the interpreter. bool: bool(x) -> bool bytearray: bytearray(iterable_of_ints) -> bytearray bytes: bytes(iterable_of_ints) -> bytes classmethod: classmethod(function) -> method complex: complex(real[, imag]) -> complex number dict: dict() -> new empty dictionary enumerate: enumerate(iterable[, start]) -> iterator for index, value of iterable filter: filter(function or None, iterable) --> filter object float: float(x) -> floating point number frozenset: frozenset() -> empty frozenset object int: int(x=0) -> integer list: list() -> new empty list map: map(func, *iterables) --> map object memoryview: Create a new memoryview object which references the given object. object: The most base type property: property(fget=None, fset=None, fdel=None, doc=None) -> property attribute range: range(stop) -> range object reversed: reversed(sequence) -> reverse iterator over values of the sequence set: set() -> new empty set object slice: slice(stop) staticmethod: staticmethod(function) -> method str: str(object='') -> str super: super() -> same as super(__class__, <first argument>) tuple: tuple() -> empty tuple type: type(object_or_name, bases, dict) zip: zip(iter1 [,iter2 [...]]) --> zip object exception: ArithmeticError: Base class for arithmetic errors. AssertionError: Assertion failed. AttributeError: Attribute not found. BlockingIOError: I/O operation would block. BrokenPipeError: Broken pipe. BufferError: Buffer error. BytesWarning: Base class for warnings about bytes and buffer related problems, mostly ChildProcessError: Child process error. ConnectionAbortedError: Connection aborted. ConnectionError: Connection error. ConnectionRefusedError: Connection refused. ConnectionResetError: Connection reset. DeprecationWarning: Base class for warnings about deprecated features. EOFError: Read beyond end of file. EnvironmentError: Base class for I/O related errors. Exception: Common base class for all non-exit exceptions. FileExistsError: File already exists. FileNotFoundError: File not found. FloatingPointError: Floating point operation failed. FutureWarning: Base class for warnings about constructs that will change semantically IOError: Base class for I/O related errors. ImportError: Import can't find module, or can't find name in module. ImportWarning: Base class for warnings about probable mistakes in module imports IndentationError: Improper indentation. IndexError: Sequence index out of range. InterruptedError: Interrupted by signal. IsADirectoryError: Operation doesn't work on directories. KeyError: Mapping key not found. LookupError: Base class for lookup errors. MemoryError: Out of memory. NameError: Name not found globally. NotADirectoryError: Operation only works on directories. NotImplementedError: Method or function hasn't been implemented yet. OSError: Base class for I/O related errors. OverflowError: Result too large to be represented. PendingDeprecationWarning: Base class for warnings about features which will be deprecated PermissionError: Not enough permissions. ProcessLookupError: Process not found. RecursionError: Recursion limit exceeded. ReferenceError: Weak ref proxy used after referent went away. ResourceWarning: Base class for warnings about resource usage. RuntimeError: Unspecified run-time error. RuntimeWarning: Base class for warnings about dubious runtime behavior. StopAsyncIteration: Signal the end from iterator.__anext__(). StopIteration: Signal the end from iterator.__next__(). SyntaxError: Invalid syntax. SyntaxWarning: Base class for warnings about dubious syntax. SystemError: Internal error in the Python interpreter. TabError: Improper mixture of spaces and tabs. TimeoutError: Timeout expired. TypeError: Inappropriate argument type. UnboundLocalError: Local name referenced but not bound to a value. UnicodeDecodeError: Unicode decoding error. UnicodeEncodeError: Unicode encoding error. UnicodeError: Unicode related error. UnicodeTranslateError: Unicode translation error. UnicodeWarning: Base class for warnings about Unicode related problems, mostly UserWarning: Base class for warnings generated by user code. ValueError: Inappropriate argument value (of correct type). Warning: Base class for warning categories. WindowsError: Base class for I/O related errors. ZeroDivisionError: Second argument to a division or modulo operation was zero. function: __build_class__: __build_class__(func, name, *bases, metaclass=None, **kwds) -> class __import__: __import__(name, globals=None, locals=None, fromlist=(), level=0) -> module abs: Return the absolute value of the argument. all: Return True if bool(x) is True for all values x in the iterable. any: Return True if bool(x) is True for any x in the iterable. ascii: Return an ASCII-only representation of an object. bin: Return the binary representation of an integer. callable: Return whether the object is callable (i.e., some kind of function). chr: Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff. compile: Compile source into a code object that can be executed by exec() or eval(). delattr: Deletes the named attribute from the given object. dir: dir([object]) -> list of strings divmod: Return the tuple (x//y, x%y). Invariant: div*y + mod == x. eval: Evaluate the given source in the context of globals and locals. exec: Execute the given source in the context of globals and locals. format: Return value.__format__(format_spec) getattr: getattr(object, name[, default]) -> value globals: Return the dictionary containing the current scope's global variables. hasattr: Return whether the object has an attribute with the given name. hash: Return the hash value for the given object. hex: Return the hexadecimal representation of an integer. id: Return the identity of an object. input: Read a string from standard input. The trailing newline is stripped. isinstance: Return whether an object is an instance of a class or of a subclass thereof. issubclass: Return whether 'cls' is a derived from another class or is the same class. iter: iter(iterable) -> iterator len: Return the number of items in a container. locals: Return a dictionary containing the current scope's local variables. max: max(iterable, *[, default=obj, key=func]) -> value min: min(iterable, *[, default=obj, key=func]) -> value next: next(iterator[, default]) oct: Return the octal representation of an integer. open: Open file and return a stream. Raise IOError upon failure. ord: Return the Unicode code point for a one-character string. pow: Equivalent to x**y (with two arguments) or x**y % z (with three arguments) print: print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) repr: Return the canonical string representation of the object. round: round(number[, ndigits]) -> number setattr: Sets the named attribute on the given object to the specified value. sorted: Return a new list containing all items from the iterable in ascending order. sum: Return the sum of a 'start' value (default: 0) plus an iterable of numbers vars: vars([object]) -> dictionary
builtins 的引用 / builtins Import
对于builtins模块一般使用 __builtins__ 进行引用,如果在 __main__ 模块内引用,则 __builtins__ 是对 builtins 模块的直接引用,而如果是在非 __main__ 模块中引用,则 __builtins__ 是对 builtins.__dict__ 的引用,而非本身,即返回的类型实质上是一个字典。
首先定义一个 Foo.py 文件,在文件中输入下面的代码
1 print('__builtins__ called not in __main__, type is:', type(__builtins__))
然后在另一个文件中将 Foo 导入,并同样对 __builtins__ 的引用进行查看,
1 import Foo 2 print('__builtins__ called in __main__, type is:', type(__builtins__))
最终的输出可以看到,在 Foo 中,__builtins__ 返回的是一个字典,而在当前模块中则返回的是 module,即 builtins 模块
__builtins__ called not in __main__, type is: <class 'dict'> __builtins__ called in __main__, type is: <class 'module'>
Note: 这一特性在判断内置模块是否有某些函数的时候将会需要特别注意(常见于编写 Python2/3 都通用的代码时用于判断内置函数,如是否有 raw_input,从而对函数重新指向,使其通用于 Python2/3)。