在 Python 中,import、from 和 as 是用于模块(module)和包(package)导入的核心关键字。它们让你能够复用他人或自己编写的代码,是构建大型项目、使用第三方库的基础。#python#
下面从基本语法、使用场景、区别对比、最佳实践四个维度为你详细解析。
一、核心概念前置
- 模块(Module):一个 .py 文件就是一个模块,如 math.py。
- 包(Package):包含 __init__.py 的文件夹,可组织多个模块,如 numpy/。
- 标准库:Python 自带的模块(如 os, json, datetime)。
- 第三方库:通过 pip install 安装的包(如 requests, pandas)。
✅ 所有导入操作的本质:将其他文件中的代码加载到当前命名空间中使用。二、三种基本导入方式详解
1️⃣import 模块名
作用:导入整个模块,使用时需加前缀。
import mathprint(math.sqrt(16)) # 4.0print(math.pi) # 3.1415926...✅优点:
- 命名空间清晰,避免名称冲突
- 明确知道函数来自哪个模块
❌缺点:
- 调用时需写完整路径(稍长)
底层:math 成为当前命名空间的一个对象,其属性是模块内的函数/变量。
2️⃣from 模块名 import 名称
作用:从模块中导入指定名称(函数、类、变量等),直接使用,无需前缀。
from math import sqrt, piprint(sqrt(16)) # 4.0print(pi) # 3.1415926...✅优点:
- 调用简洁,代码更短
❌缺点:
- 可能引发命名冲突(如 from os import path 和 from sys import path)
- 不清楚 sqrt 来自哪个模块(降低可读性)
⚠️ 绝对禁止: python 编辑 from math import * # 污染命名空间!不要用!
3️⃣import ... as 别名或from ... import ... as 别名
作用:为模块或成员起一个别名(alias),简化调用或避免冲突。
场景 1:模块别名(最常用)
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltdata = np.array([1, 2, 3])df = pd.DataFrame(data)plt.plot(data)✅为什么流行?
- 社区约定(np, pd, plt 已成标准)
- 避免长名字(如 matplotlib.pyplot → plt)
场景 2:成员别名
from math import sqrt as square_rootprint(square_root(25)) # 5.0✅适用场景:
- 名称冲突:from module1 import func 和 from module2 import func → 改名为 func1, func2
- 提高可读性:json_loads vs loads
语法
示例
使用方式
适用场景
import 模块
import json
json.loads(...)
通用、安全、推荐默认使用
from 模块 import 成员
from json import loads
loads(...)
频繁使用某几个函数时
import 模块 as 别名
import numpy as np
np.array(...)
第三方库标准用法
from 模块 import 成员 as 别名
from datetime import datetime as dt
dt.now()
避免冲突或简化名称
❌ from 模块 import *
from math import *
sqrt(...), pi
禁止!污染命名空间
四、高级用法与注意事项
✅ 1.导入包(含子模块)
# 导入整个包import requests# 导入子模块from urllib import requestfrom urllib.parse import urlparse✅ 2.相对导入(仅限包内)
在包内部模块之间导入(用 . 表示当前目录,.. 表示上级):
# mypackage/submodule.py 中from . import sibling_module # 同级from ..utils import helper # 上级包的 utils 模块⚠️ 相对导入只能在包内使用,不能在脚本直接运行时使用。
✅ 3.动态导入(不常用)
# 使用 importlib(高级场景)import importlibmath = importlib.import_module('math')五、常见误区与最佳实践❌ 误区 1:import会重复执行模块代码?
→ 不会! Python 会缓存已导入模块(在 sys.modules 中),多次 import 只加载一次。
❌ 误区 2:from ... import ...性能更好?
→ 没有性能差异。两者最终都访问同一对象,只是命名空间不同。
✅ 最佳实践:
建议
优先用 import 模块
保持命名空间清晰,尤其在大型项目中
第三方库用标准别名
np, pd, plt, tf, sk 等
避免 import *
会导致难以调试的命名冲突
导入语句放文件顶部
PEP 8 规范:import 应位于文件开头(__future__ 之后)
按组排序导入
标准库 → 第三方库 → 本地模块,每组空一行
import osimport sysimport numpy as npimport requestsfrom myproject import utils六、实际项目中的典型用法Web 开发(Flask)
from flask import Flask, request, jsonifyimport sqlite3 as db数据分析
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn.model_selection import train_test_split自动化脚本
import osimport shutilfrom datetime import datetime七、总结:一句话掌握精髓import math → 用 math.sqrt(),安全清晰from math import sqrt → 用 sqrt(),简洁但慎用import numpy as np → 用 np.array(),社区标准永远不要 from xxx import *!
![]()
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.