Python中的 dir() 函数完全指南

dir() 函数是 Python 的内置工具,我们主要用它来列出对象的属性(例如方法、变量等)。在开发和调试过程中,它能帮助我们检查模块、类、函数,甚至是我们自己定义的对象。

语法

> dir([object])

参数:

  • object (可选): 任何 Python 对象(例如列表、字典、类、模块等)。

返回类型: 返回一个名称列表(字符串),代表了该对象的属性或当前作用域内的内容。

行为表现

  • 不带参数时: 列出当前局部作用域内的名称。
  • 用于模块时: 列出所有可用的函数、类和常量。
  • 用于用户自定义对象时: 列出所有属性,包括用户自定义的属性(如果定义了 dir 方法)。
  • 用于内置对象时: 列出所有有效的属性和方法。

示例:dir() 函数的应用

示例 1:不传递参数

在这个例子中,我们使用 dir() 函数来列出当前 Python 环境中的对象属性和方法。这能让我们直观地探索当前作用域下可用的函数和对象。

Python


CODEBLOCK_d4a9ac99

输出结果:

> [‘annotations‘, ‘builtins‘, ‘doc‘, ‘loader‘, ‘name‘, ‘package‘, ‘spec‘, ‘traceback‘]

>

> [‘annotations‘, ‘builtins‘, ‘doc‘, ‘loader‘, ‘name‘, ‘package‘, ‘spec‘, ‘math‘, ‘random‘, ‘traceback‘]
原理解析:

  • dir() 会列出当前局部作用域内的名称。
  • 请注意,在导入模块后,输出列表中包含了 randommath,而在导入之前这些名称是不存在的。

示例 2:传递模块对象

这个例子向我们展示了如何利用 dir() 来探索某个模块(例如 random)内部的所有属性。

Python


CODEBLOCK_ed79aea2

输出结果:

> Attributes in random module:

>

> [‘BPF‘, ‘LOG4‘, ‘NVMAGICCONST‘, ‘RECIPBPF‘, ‘Random‘, ‘SGMAGICCONST‘, ‘SystemRandom‘, ‘TWOPI‘, ‘ONE‘, ‘Sequence‘, ‘all‘, ‘builtins‘, ‘cached‘, ‘doc‘, ‘file‘, ‘loader‘, ‘name‘, ‘package‘, ‘spec‘, ‘accumulate‘, ‘acos‘, ‘bisect‘, ‘ceil‘, ‘cos‘, ‘e‘, ‘exp‘, ‘fabs‘, ‘floor‘, ‘index‘, ‘inst‘, ‘isfinite‘, ‘lgamma‘, ‘log‘, ‘log2‘, ‘os‘, ‘pi‘, ‘random‘, ‘repeat‘, ‘sha512‘, ‘sin‘, ‘sqrt‘, ‘test‘, ‘testgenerator‘, ‘urandom‘, ‘warn‘, ‘betavariate‘, ‘binomialvariate‘, ‘choice‘, ‘choices‘, ‘expovariate‘, ‘gammavariate‘, ‘gauss‘, ‘getrandbits‘, ‘getstate‘, ‘lognormvariate‘, ‘normalvariate‘, ‘paretovariate‘, ‘randbytes‘, ‘randint‘, ‘random‘, ‘randrange‘, ‘sample‘, ‘seed‘, ‘setstate‘, ‘shuffle‘, ‘triangular‘, ‘uniform‘, ‘vonmisesvariate‘, ‘weibullvariate‘]
原理解析: 传入 random 模块后,dir() 列出了该模块中所有可用的常量、函数和类。

示例 3. 当列表对象作为参数传递时

在这里,我们将一个列表和一个字典传递给 dir(),以此来查看它们各自支持的方法。

Python


CODEBLOCK_35e0db68

输出结果:

> [‘add‘, ‘class‘, ‘classgetitem‘, ‘contains‘, ‘delattr‘, ‘delitem‘, ‘dir‘, ‘doc‘, ‘eq‘, ‘format‘, ‘ge‘, ‘getattribute‘, ‘getitem‘, ‘getstate‘, ‘gt‘, ‘hash‘, ‘iadd‘, ‘imul‘, ‘init‘, ‘initsubclass‘, ‘iter‘, ‘le‘, ‘len‘, ‘lt‘, ‘mul‘, ‘ne‘, ‘new‘, ‘reduce‘, ‘reduce_ex‘, ‘repr‘, ‘reversed‘, ‘rmul‘, ‘setattr‘, ‘setitem‘, ‘sizeof‘, ‘str‘, ‘subclasshook‘, ‘append‘, ‘clear‘, ‘copy‘, ‘count‘, ‘extend‘, ‘index‘, ‘insert‘, ‘pop‘, ‘remove‘, ‘reverse‘, ‘sort‘]

> [‘class‘, ‘classgetitem‘, ‘contains‘, ‘delattr‘, ‘delitem‘, ‘dir‘, ‘doc‘, ‘eq‘, ‘format‘, ‘ge‘, ‘getattribute‘, ‘getitem‘, ‘getstate‘, ‘gt‘, ‘hash‘, ‘init‘, ‘initsubclass‘, ‘ior‘, ‘iter‘, ‘le‘, ‘len‘, ‘lt‘, ‘ne‘, ‘new‘, ‘or‘, ‘reduce‘, ‘reduce_ex‘, ‘repr‘, ‘reversed‘, ‘ror‘, ‘setattr‘, ‘setitem‘, ‘sizeof‘, ‘str‘, ‘subclasshook‘, ‘clear‘, ‘copy‘, ‘fromkeys‘, ‘get‘, ‘items‘, ‘keys‘, ‘pop‘, ‘popitem‘, ‘setdefault‘, ‘update‘, ‘values‘]
原理解析:

  • dir(my_list) 返回了列表对象可用的所有方法(例如 append, sort 等)。
  • dir(my_dict) 返回了字典对象可用的所有方法(例如 keys, values 等)。

示例 4. 当用户自定义对象作为参数传递时

我们可以定义自己的类,并通过实现 dir() 方法来自定义 dir() 的返回内容。

Python


CODEBLOCK_3f491621

输出结果

[‘item‘, ‘price‘, ‘quantity‘]

*

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/43589.html
点赞
0.00 平均评分 (0% 分数) - 0