当前位置: 首页 > news >正文

第二十九天打卡

@浙大疏锦行

模块和库的导入

1.  导入官方库的三种手段

2.  导入自定义库/模块的方式

3.  导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致)

导入官方库的三种手段

方式一:用import直接导入整个模块

代码示例

 
import math
print(math.sqrt(16))  # 计算16的平方根
 

运行结果

4.0

运行步骤解析

  1. import math这行代码,会把 Python 的math库整个加载到当前程序里。
  2. 当执行math.sqrt(16)时,程序会去math模块里寻找sqrt函数,接着调用该函数进行计算。 

2. 使用 from ... import ... 导入模块中的特定内容

这种方式可以直接导入模块中的函数、类或变量,使用时无需加模块前缀。

from random import randint, choice# 生成 1 到 10 之间的随机整数
random_number = randint(1, 10)
print(random_number)  # 可能输出 1 到 10 之间的任意整数# 从列表中随机选择一个元素
fruits = ["apple", "banana", "cherry"]
random_fruit = choice(fruits)
print(random_fruit)  # 可能输出 "apple"、"banana" 或 "cherry"

运行步骤解释

  1. from random import randint, choice:从 random 模块中导入 randint 和 choice 两个函数。
  2. randint(1, 10):直接调用 randint 函数生成随机整数。
  3. choice(fruits):直接调用 choice 函数从列表中随机选择元素。

3. 使用 import ... as ... 为模块指定别名

当模块名较长或可能与当前代码中的名称冲突时,可以使用别名简化调用。

import pandas as pd
import numpy as np# 创建一个简单的 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35]}
df = pd.DataFrame(data)
print(df)# 创建一个 numpy 数组并计算平均值
arr = np.array([1, 2, 3, 4, 5])
print(np.mean(arr))  # 输出 3.0

运行步骤解释

  1. import pandas as pd:导入 pandas 模块并指定别名为 pd
  2. import numpy as np:导入 numpy 模块并指定别名为 np
  3. pd.DataFrame(data):使用 pandas 的 DataFrame 类创建表格数据。
  4. np.array([1, 2, 3, 4, 5]):使用 numpy 创建数组,并调用 np.mean() 计算平均值。

 导入自定义库/模块的方式

一、导入同级目录下的模块

如果自定义模块与主程序在同一目录下,可以直接导入。

my_project/
├── main.py
└── utils.py

utils.py 内容

# utils.py
def add(a, b):return a + bdef multiply(a, b):return a * b

main.py 内容

# main.py
import utilsresult1 = utils.add(3, 4)
result2 = utils.multiply(2, 5)print(result1)  # 输出 7
print(result2)  # 输出 10

运行步骤解释

  1. 创建模块:在 utils.py 中定义了两个函数 add 和 multiply
  2. 导入模块:在 main.py 中使用 import utils 导入同级目录下的 utils.py
  3. 调用函数:通过 utils.add() 和 utils.multiply() 调用模块中的函数。

二、导入子目录中的模块(作为包)

如果自定义模块位于子目录中,需要创建 __init__.py 文件将其声明为包。

文件结构

my_project/
├── main.py
└── mypackage/├── __init__.py  # 空文件,声明该目录是一个包└── math_utils.py

math_utils.py 内容

# math_utils.py
def square(x):return x ** 2def cube(x):return x ** 3

main.py 内容

python

运行

# main.py
from mypackage import math_utilsresult1 = math_utils.square(5)
result2 = math_utils.cube(3)print(result1)  # 输出 25
print(result2)  # 输出 27

运行步骤解释

  1. 创建包:在 mypackage 目录下创建空的 __init__.py 文件(Python 3.3+ 允许省略,但建议保留)。
  2. 定义模块:在 math_utils.py 中编写功能函数。
  3. 导入模块:使用 from mypackage import math_utils 导入子目录中的模块。
  4. 调用函数:通过 math_utils.square() 调用模块中的函数。

三、使用相对导入(在包内部)

如果需要在包内部的模块之间相互导入,可以使用相对导入。

文件结构

my_project/
├── main.py
└── mypackage/├── __init__.py├── math_utils.py└── stats.py

math_utils.py 内容

# math_utils.py
def square(x):return x ** 2

stats.py 内容

# stats.py
from .math_utils import square  # 相对导入def mean_square(numbers):return [square(n) for n in numbers]

main.py 内容

# main.py
from mypackage.stats import mean_squareresult = mean_square([1, 2, 3])
print(result)  # 输出 [1, 4, 9]

运行步骤解释

  1. 相对导入:在 stats.py 中使用 from .math_utils import square 导入同级模块。
  2. . 表示当前包:相对导入中的 . 表示当前包目录。
  3. 避免直接运行包内模块:相对导入只能在包内部使用,直接运行 stats.py 会报错,需通过主程序导入调用。

四、导入上级目录或其他目录的模块

如果需要导入不在当前目录或子目录中的模块,可以临时修改 sys.path

文件结构

my_project/
├── main.py
├── utils/
│   └── string_utils.py
└── helpers/└── date_utils.py

string_utils.py 内容

# string_utils.py
def capitalize_words(text):return ' '.join(word.capitalize() for word in text.split())

main.py 内容

# main.py
import sys
from pathlib import Path# 将上级目录的 utils 文件夹添加到模块搜索路径
sys.path.append(str(Path(__file__).parent.parent / 'utils'))from string_utils import capitalize_wordsresult = capitalize_words("hello world")
print(result)  # 输出 "Hello World"

运行步骤解释

  1. 修改搜索路径:使用 sys.path.append() 将 utils 目录添加到模块搜索路径。
  2. 动态路径处理:通过 Path(__file__).parent.parent 获取上级目录,确保路径在不同环境下都能正常工作。
  3. 导入模块:直接导入 string_utils 模块并使用其功能。

相关文章:

  • 分布式锁(详解)
  • ISO 26262-5 生产维护和报废
  • MQTT控制报文
  • 初学c语言18(自定义类型:结构体)
  • 硬件开发复盘实战指南
  • DiagramJS设计原理解读(二)
  • MVC和MVVM架构的区别
  • PyInstaller 如何在mac电脑上生成在window上可执行的exe文件
  • 项目开发中如何Git如何保持官方补丁更新
  • python与mysql怎么完成大量的数据交互?
  • 【Python/Tkinter】实现程序菜单
  • 海康相机---采集图像
  • PTA:双端队列
  • 【T2I】Controllable Generation with Text-to-ImageDiffusion Models: A Survey
  • 中小制造企业网络安全防护指南
  • 2025网络出版服务许可证申请保姆级教程
  • JavaScriptAPIs学习day3--事件高级
  • 对于从事FPGA行业的人来说,需要掌握哪些知识
  • 5G 网络中 DNN 的深度解析:从基础概念到核心应用
  • 第十章 ICU组件配置
  • 学习网站建设的是什么专业/网站维护的内容有哪些
  • 个人做网站 优帮云/优化百度seo技术搜索引擎
  • 怎样建设网站客服服务器/学大教育培训机构电话
  • 做网站什么笔记本好用/发布外链的平台有哪些
  • 洛阳网站建设培训/如何宣传推广
  • 信宜网站建设/兰州关键词快速上首页排名