dir() 和 help() 是 python 中快速探查对象用法的轻量工具:先用 dir() 过滤出非双下划线方法(如 [x for x in dir(str) if not x.startswith('_')]),再用 help() 查看函数签名(如 help(str.split) 首行即参数名与默认值),组合使用可三秒定位关键信息。

dir() 和 help() 是 Python 里最轻量、最即时的“语法探针”,不用查文档、不依赖网络,只要对象在当前作用域,就能立刻看到它能干什么、怎么用。但直接敲 help(list) 很可能掉进信息洪流——你不是要读完所有源码,而是想三秒内知道 str.split() 的分隔符参数叫什么、默认值是什么。
用 dir() 快速筛出关键方法,避开冗余属性
dir() 返回的是对象的属性和方法名列表,但默认包含大量双下划线方法(如 __add__、__doc__),实际调用时几乎不用。重点在于过滤出“人能看懂、能直接用”的名字:
- 对常见类型优先加前缀过滤:比如查字符串方法,
dir(str)结果太多,改用[x for x in dir(str) if not x.startswith('_')],立刻聚焦到split、strip、replace等真实可用的方法 - 注意大小写敏感:
dir(list)里有append,但没有Append;误写成大写会导致后续help()报NameError - 模块对象(如
os)的dir()结果受导入方式影响:如果只做了import os,dir(os)是完整的;但如果用了from os import path,再查dir(path)才是子模块的真面目
用 help() 精准查参数签名,别被文档头吓退
help() 显示的是对象的 __doc__,但默认滚动输出容易错过关键行。真正高效的做法是盯住开头几行——那里固定是函数签名和一句话说明:
- 查
help(str.split),第一行就是split(self, sep=None, maxsplit=-1),参数名、默认值全在,根本不用往下翻 - 遇到类方法(如
datetime.datetime.now),help()会显示now(tz=None),说明它接受一个可选的tz参数,而不是无参调用 - 如果
help()输出后卡住,按q退出(不是Ctrl+C),否则会中断当前 REPL 会话 - 某些内置类型(如
int)的help()会列出大量魔术方法,此时直接搜Parameters或Args能快速定位参数段落
组合使用:先 dir() 缩范围,再 help() 定细节
单独用任一函数都容易偏航。典型场景是查 json 模块怎么把字典转成带缩进的字符串:
- 先
import json,然后dir(json)—— 扫一眼发现dumps和dump都在,排除掉明显是文件操作的dump - 再
help(json.dumps),第一行就写着dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, ...),indent参数直接暴露 - 验证:
json.dumps({'a': 1}, indent=2)确实生效;如果试json.dumps({'a': 1}, spacing=2),会报TypeError: dumps() got an unexpected keyword argument 'spacing'—— 这说明你没看准参数名
容易被忽略的边界情况
这两个函数看似简单,但在真实调试中常因环境或对象状态失效:
-
help()对 lambda 函数或动态生成的对象(如用type()创建的类)基本无效,因为它们没有完整 docstring,返回 “Help on function …” 后就是空行 - 在 Jupyter 中,
?是help()的快捷替代(如str.split?),但终端 REPL 里不支持,别混用 -
dir()不会列出继承自父类但未被子类覆盖的方法(除非父类在 MRO 中显式存在),比如自定义类没重写__str__,dir(实例)就不会显示它,得查父类 - 第三方库(如
pandas)的某些方法(如Series.plot)返回的是封装对象,dir()看到的是包装器的方法,不是底层 matplotlib 的接口,这时得顺着返回值类型再查一层
真正快的关键不是敲得多,而是每次 dir() 都带过滤、每次 help() 都只扫前三行。参数名拼错、默认值记混、方法名大小写不对——这些问题全在那几行签名里藏着,找到它,就省了八成查文档时间。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











