Python模块:import的四种导入方式全对比
Python模块import的四种导入方式全对比一、开篇同一种需求四种写法Python提供了四种导入模块的方式每种都有不同的适用场景# 方式一导入整个模块importmath# 方式二导入模块并起别名importmathasm# 方式三从模块中导入特定名称frommathimportsqrt,pi# 方式四导入模块中的所有公开名称frommathimport* 这四种方式表面上看都能让你使用math模块的功能但它们在命名空间、内存占用、代码可读性和潜在风险上有着本质区别。选择哪种方式直接影响代码的质量。二、四种方式逐一详解2.1 方式一import 模块名# import 模块名 —— 导入整个模块对象importmath# 这创建了一个变量 math指向整个math模块对象print(type(math))# class moduleprint(dir(math)[:10])# [__doc__, ..., acos, acosh, ...]# 使用必须通过模块名访问print(math.pi)# 3.141592653589793print(math.sqrt(16))# 4.0print(math.sin(math.pi/2))# 1.0# ✅ 优点# 1. 命名空间清晰——math.sqrt一看就知道哪来的# 2. 不会污染当前命名空间# 3. 不会和已有的变量名冲突# ❌ 缺点# 1. 每次都写模块名——如果模块名很长会比较啰嗦# 2. 导入了整个模块虽然通常不是问题# 适用场景# - 大多数情况下的默认选择# - 模块名不太长时# - 需要模块中多个功能时2.2 方式二import 模块名 as 别名# import 模块名 as 别名 —— 给模块起一个短名字importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltimporttensorflowastf# 使用别名访问arrnp.array([1,2,3,4,5])print(np.mean(arr))# 3.0# ✅ 优点# 1. 输入更少某些库的名字本身就很长# 2. 符合社区约定np是指numpy几乎已成标准# 3. 解决命名冲突两个模块有相同的名字# ❌ 缺点# 1. 如果用了非标准的别名降低可读性# import math as pineapple # 不要这样# pineapple.sqrt(16) # 这段代码会让同事困惑# ❌ 不推荐的用法# 除非有明确的重命名理由如避免冲突否则不要随意起别名importjsonasjs# 不推荐——json本身就不长# ✅ 推荐的用法社区约定importnumpyasnp# 标准约定importpandasaspd# 标准约定importmatplotlib.pyplotasplt# 标准约定2.3 方式三from 模块名 import 名称# from 模块名 import 名称 —— 将特定名称导入当前命名空间frommathimportsqrt,pi,sin,cos# 可以直接使用这些名称不需要模块名前缀print(sqrt(16))# 4.0print(pi)# 3.141592653589793print(sin(pi/2))# 1.0# 未导入的名称仍然需要通过模块名访问# print(math.ceil(3.14)) # NameError! math没有被导入importmath# 如果需要其他功能单独导入模块print(math.ceil(3.14))# 4# 可以同时导入多个名称fromos.pathimportjoin,exists,isfileprint(join(dir,file.txt))# dir/file.txt# ✅ 优点# 1. 代码更简洁——不需要写模块名# 2. 明确导入了什么——读者知道你用了模块的哪些功能# 3. 可以只导入需要的——虽然不会减少内存占用# ❌ 缺点和陷阱# 1. 可能和已有的变量名冲突pi我自定义的pifrommathimportpi# 覆盖了上面的piprint(pi)# 3.141592653589793 —— 不是 我自定义的pi# 2. 导入太多名称会让命名空间混乱frommathimportsin,cos,tan,asin,acos,atan,sqrt,pi,e,floor,ceil,...# 如果都是从不同模块导入的阅读者很难知道每个名称来自哪里# 3. 变量绑定问题——from import导入的是值的引用# 如果源模块中的值改变了from导入的变量不会自动更新2.4 方式四from 模块名 import *# from 模块名 import * —— 导入模块的所有公开名称# ⚠️ 这是最不推荐的方式原因如下# 1. 你不知道导入了什么frommathimport*# 现在你有sin, cos, tan, sqrt, pi, e, floor, ceil, ...# 以及你不经意间覆盖的pow, abs, sum, ...任何同名变量# 2. 污染命名空间——导致难以发现的命名冲突defsin(x):我自己写的sin函数返回字符串return这不是正弦frommathimport*# 刚才定义的sin被覆盖了print(sin(0))# 0.0 —— 不是 这不是正弦# 3. 可读性极差# 读代码的人不知道sum来自哪里——是内置的math的还是你定义的# from math import *# from statistics import *# sum(...) # 这是哪个sum# 4. PEP 8强烈不推荐# Wildcard imports (from module import *) should be avoided# ✅ 唯一可接受的例外# 在 __init__.py 中控制包的公开API# mypackage/__init__.py:# from .module_a import ClassA, func_b# from .module_b import ClassC# __all__ [ClassA, func_b, ClassC]2.5 __all__控制from import *的行为# __all__是一个模块级变量# 定义了 from module import * 时哪些名称会被导入# 假设有一个模块 my_module.py __all__ [public_func, PublicClass] # 白名单 def public_func(): 这个函数会被导出 pass def _private_func(): 下划线开头的默认不会被导出 pass class PublicClass: 这个类会被导出 pass class _PrivateClass: 下划线开头的默认不会被导出 pass internal_data 不会被导出 # 不在__all__中 # 使用# from my_module import *# public_func() # ✅ 可用在__all__中# PublicClass() # ✅ 可用在__all__中# _private_func() # ❌ 不可用_开头且不在__all__中# internal_data # ❌ 不可用不在__all__中# __all__是一种显式声明模块公开API的方式# 即使不用from import *__all__也能作为文档告诉使用者哪些是公开的三、四种方式的对比# ⌨️ 完整对比# 假设要使用math、os、json三个模块的功能# 方式一import —— 命名空间最清晰importmathimportosimportjson# 使用math.sqrt(), os.path.join(), json.dumps()# 一目了然——每个函数来自哪个模块# 方式二import as —— 最灵活importnumpyasnpimportpandasaspd# 使用np.array(), pd.DataFrame()# 在保持清晰的同时简化了输入# 方式三from import —— 在简洁和清晰间平衡frommathimportsqrt,pifromos.pathimportjoinfromjsonimportdumps,loads# 使用sqrt(), join(), dumps() —— 简洁# 但读者需要记住sqrt来自mathjoin来自os.path# 方式四from import * —— 简洁但危险的# from math import *# from os import * # ⚠️ os没有__all__会导入所有名称# 不到万不得已不要用四、最佳实践# ✅ 推荐做法一默认使用 import 模块名importmathimportjsonimportos# 清晰、安全、不会污染命名空间# ✅ 推荐做法二社区标准的别名importnumpyasnpimportpandasaspdimportmatplotlib.pyplotasplt# ✅ 推荐做法三from import 特定名称——只导入几个时fromcollectionsimportdefaultdict,CounterfrompathlibimportPathfromtypingimportOptional,List# ✅ 推荐做法四导入子模块importos.path# 导入子模块fromosimportpath# 另一种方式# ❌ 避免的做法# 1. 不要用 from module import *除非在__init__.py中# 2. 不要给模块起奇怪的别名# 3. 不要同时用多种导入方式从同一个模块导入# 不好的例子# import math# from math import sqrt # 重复了五、总结四种导入方式各有适用场景。总体原则是以代码可读性为第一优先。选型速查方式适用场景风险import math默认选择使用模块中多个功能低import numpy as np长模块名社区约定低from math import sqrt只用到1-2个功能中——命名冲突from math import *几乎只在__init__.py中高——不推荐✅黄金法则宁可多写几个字符也别让读代码的人猜每个名字来自哪里。

相关新闻

AI时代如何识别高质量技术内容:从原理到实践的深度指南

AI时代如何识别高质量技术内容:从原理到实践的深度指南

在AI内容泛滥的今天,为什么高质量的非虚构书籍反而显得更加珍贵?这不仅仅是内容质量的问题,更关乎技术从业者如何在海量信息中保持判断力。作为开发者,我们每天都在与AI生成的内容打交道——从代码补全到文档撰写,从技…

2026/9/2 4:43:20 阅读更多 →
Python模块:模块化的概念与import语句详解

Python模块:模块化的概念与import语句详解

Python模块:模块化的概念与import语句详解一、开篇:为什么需要模块 想象一下,你把所有的Python代码都写在一个文件里——几百个函数、几十个类、数千行代码。三个月后你想找一个函数,得在这个巨大的文件中翻半天。更糟的是&#x…

2026/9/2 12:40:59 阅读更多 →
为什么选择Arena?探索这款革命性Swift Playground生成工具的核心优势

为什么选择Arena?探索这款革命性Swift Playground生成工具的核心优势

为什么选择Arena?探索这款革命性Swift Playground生成工具的核心优势 【免费下载链接】Arena A command line tool to create Swift Playground projects with SPM package dependencies 项目地址: https://gitcode.com/gh_mirrors/arena/Arena Arena是一款专…

2026/9/1 22:16:54 阅读更多 →

最新新闻

ASP.Net项目化教程源码zip包:从解压到IIS部署的完整实操指南

ASP.Net项目化教程源码zip包:从解压到IIS部署的完整实操指南

简介:面向ASP.NET初、中级学习者及毕业设计学生,这套配套源码以图书管理系统为实战载体,系统展示ASP.NET页面生命周期、服务器控件与视图状态、MVC路由与过滤器、C#面向对象与LINQ查询、ADO.NET及Entity Framework数据库交互、Web API和身份验…

2026/9/3 20:45:50 阅读更多 →
HT7032三相计量芯片应用:从选型到校表全流程指南

HT7032三相计量芯片应用:从选型到校表全流程指南

简介:面向智能电表与电力监测场景的三相计量芯片HT7032开发资料包,以电路原理图和C语言驱动代码为核心,帮助嵌入式工程师理解高精度电能测量的硬件搭建与软件实现。压缩包共4个文件,包含2份PDF电路原理图、1个C源文件和1个头文件&…

2026/9/3 20:45:50 阅读更多 →
FunASR Docker部署实战:搭建2Pass实时语音识别服务并完成WebSocket测试

FunASR Docker部署实战:搭建2Pass实时语音识别服务并完成WebSocket测试

最近需要在本地部署一个语音识别服务,用于后续的音频转文字功能。经过对比后选择了阿里开源的 FunASR。 本文记录一次完整的 FunASR 部署过程,包括: Docker 部署 FunASR Runtime配置 Paraformer 离线模型配置 Online 实时模型配置 VAD、标点…

2026/9/3 20:45:50 阅读更多 →
微信小程序校园跑腿系统毕业设计:从订单状态机到登录鉴权的完整实现

微信小程序校园跑腿系统毕业设计:从订单状态机到登录鉴权的完整实现

用微信小程序做校园跑腿系统,是近两年毕业设计里很常见的选题。很多同学选它的原因很简单:场景熟悉、功能直观、小程序形态也拿得出手。但真正把这类项目做完,你会发现,跑腿业务其实只是外壳,复杂的是订单状态怎么流转…

2026/9/3 20:45:50 阅读更多 →
MATLAB数据拟合完全指南:从polyfit到自定义模型与效果评估

MATLAB数据拟合完全指南:从polyfit到自定义模型与效果评估

做数据分析、处理实验数据或者写课程作业时,有一类问题几乎人人都会遇到:给你一组散点,让你找出一条能反映数据变化规律的曲线。这条曲线找得好,后面建模、预测、参数提取都顺;找得不好,画出来的图再漂亮&a…

2026/9/3 20:45:50 阅读更多 →
2026年MOV带通道视频素材网站TOP5:拖拽即用型透明特效资源横向评测

2026年MOV带通道视频素材网站TOP5:拖拽即用型透明特效资源横向评测

后期制作有两种“透明素材”。一种需要下载、抠像、去黑、修边、调混合模式,折腾完才能使用;另一种拖进时间线,调整大小和位置,就能直接叠在原画面上。对于每天需要处理大量短片、广告和宣传视频的团队,第二种显然更有…

2026/9/3 20:44:50 阅读更多 →

日新闻

AI智能体辅助JS逆向:从V8环境搭建到补环境实战

AI智能体辅助JS逆向:从V8环境搭建到补环境实战

先别急着点开,这不是劝退文,而是想讲清楚一件事:用 AI 做逆向值不值得学?如果要用,怎么搭一套“V8 环境 AI 智能体”来提升效率。最近逆向圈、爬虫圈都在聊 AI Agent、AST 工程逆向、JS 逆向这些词,很多新手…

2026/9/3 0:00:29 阅读更多 →
安卓设备通过修改机型信息解锁游戏高帧率:原理、操作与风险指南

安卓设备通过修改机型信息解锁游戏高帧率:原理、操作与风险指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/3 0:00:29 阅读更多 →
ARM版OpenJDK 11安装部署全攻略:下载、配置与避坑指南

ARM版OpenJDK 11安装部署全攻略:下载、配置与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/3 0:00:29 阅读更多 →

周新闻

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

2026/9/3 4:22:22 阅读更多 →
数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

2026/9/3 4:22:01 阅读更多 →
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

2026/9/3 4:22:59 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/3 4:17:49 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/3 4:18:56 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/3 4:21:44 阅读更多 →