
在Python中,以单下划线开头的标识符(如_var、_func)默认不会被from module import *导入,这是Python约定的“私有”命名惯例,用于提示开发者这些名称不应被外部直接使用。
在python中,以单下划线开头的标识符(如`_var`、`_func`)默认不会被`from module import *`导入,这是python约定的“私有”命名惯例,用于提示开发者这些名称不应被外部直接使用。
Python通过命名约定实现轻量级的封装控制。根据官方文档的说明,_* 并非一个具体符号,而是通配表达式——其中 * 表示任意字符序列,因此 _* 指代所有以单下划线 _ 开头的标识符(例如 _helper、__internal、_CONST),但不包括双下划线开头且结尾的特殊方法(如 __init__)。
当执行 from module import * 时,Python 会自动过滤掉所有匹配 _* 模式的顶层名称。例如:
# mymodule.py
public_var = "accessible"
_private_var = "not imported by *"
__dunder__ = "still imported (not matched by _*)"
def public_func():
return "OK"
def _private_func():
return "skipped"# main.py from mymodule import * print(public_var) # ✅ 正常输出:"accessible" print(_private_var) # ❌ NameError: name '_private_var' is not defined print(__dunder__) # ✅ 会被导入(因不满足 `_+任意字符` 的简单前缀模式)
⚠️ 注意事项:
安全 Python 代码沙箱:在隔离的沙箱中执行任意 Python 代码,预装 requests、NumPy、pandas 库。返回 stdout、stderr。
- 这仅是约定而非强制访问控制:
_private_var仍可通过import mymodule; mymodule._private_var访问; - 若模块定义了
__all__列表,则from ... import *仅导入该列表中显式声明的名称,此时_前缀规则被完全忽略; - 双下划线开头(如
__var)不自动受此规则保护,除非也以_开头(即__var匹配_*,但___或__不匹配); - IDE 和静态检查工具(如 PyLint)通常将
_开头名称视为“内部使用”,并给出相应提示。
总结:_* 是文档中对“以下划线开头的标识符”的简写表述,其核心作用是支持模块级别的命名可见性约定,提升代码可维护性与接口清晰度。合理使用 _ 前缀,是编写符合 Python 风格(PEP 8)和协作规范的重要实践。
立即学习“Python免费学习笔记(深入)”;

















