摘要:在 Python 中,import、from 和 as 是用于模块(module)和包(package)导入的核心关键字。它们让你能够复用他人或自己编写的代码,是构建大型项目、使用第三方库的基础。#python#
在 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 jsonjson.loads(...)通用、安全、推荐默认使用from 模块 import 成员from json import loadsloads(...)频繁使用某几个函数时import 模块 as 别名import numpy as npnp.array(...)第三方库标准用法from 模块 import 成员 as 别名from datetime import datetime as dtdt.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 utilsfrom 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 datetimeimport math → 用 math.sqrt,安全清晰from math import sqrt → 用 sqrt,简洁但慎用import numpy as np → 用 np.array,社区标准永远不要 from xxx import *!
来源:互联网AI工程师