WithCoderWithCoderWithCoder

Python 内置函数 dir()

    描述

    在 Python 中,有大量的内置模块,模块中的定义(例如:变量、函数、类)众多,无论是初学者还是精通python 的程序员都不能全部记住所有的方法。这时候 dir() 方法就非常有用了,使用 dir()函数可以查看对象内的所有的属性和方法(在 python 中任何东西都是对象,一种数据类型,一个模块等,都有自己的属性和方法)。除了常用的方法外,其他的我们不需要全部记住,在需要的时候使用 dir() 函数就好了。

    dir() 的用法

    如果对 dir() 的用法不是很清楚,可以使用 help() 方法来查看帮助:

>>> help(dir)
Help on built-in function dir in module builtins:

dir(...)
    dir([object]) -> list of strings
    
    If called without an argument, return the names in the current scope.
    Else, return an alphabetized list of names comprising (some of) the attributes
    of the given object, and of attributes reachable from it.
    If the object supplies a method named __dir__, it will be used; otherwise
    the default dir() logic is used and returns:
      for a module object: the module's attributes.
      for a class object:  its attributes, and recursively the attributes
        of its bases.
      for any other object: its attributes, its class's attributes, and
        recursively the attributes of its class's base classes.

    dir() 方法参及返回值说明:

    1. 如果 dir() 没有参数,它返回当前作用域中的名称列表;否则,返回给定参数 object 的一个已排序的属性名称列表。

    2. 如果参数对象本身提供了 __dir__() 方法,则__dir__()方法将会被使用;否则,使用默认的 dir() 逻辑并返回。

    dir()使用举例:

    1. 如果没有参数,dir() 会列出当前作用域中的名称列表:    

>>> name = 'neil'
>>> age = 100
>>> dir()

    以上代码将输出以下结果(注意name和age,按属性名称排序)

['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'age', 'name']

    2. 使用 dir() 可以查看指定模块中定义的名称,它返回的是一个已排序的字符串列表:

>>> import math  # 内置模块 math
>>> dir(math)

    以上代码输出结果:

['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb',
 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum',
  'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 
  'modf', 'nan', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']

    其中,以下划线(_)开头的名称并不是自己定义的,而是与模块相关的默认属性。

    3. 通过导入 builtins 模块,可以获得内置函数、异常和其他对象的列表:

>>> import builtins
>>> dir(builtins)

    结果如下:

['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning',
'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 
'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError',
'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError',
'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'None', 
'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError',
'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration',
'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 
'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning',
'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__',
'__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 
'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate',
'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id',
'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next',
'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice',
'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']

    4. 如果对象有 __dir__() 方法,则会使用对象提供的__dir__()方法:   

>>> class Person:
        def __dir__(self):
            return ['name','age']
>>> p = Person()
>>> dir(p)

    以上代码输出:

['age', 'name']

欢迎分享交流,转载请注明出处:WithCoder » Python 内置函数 dir()