当前位置: 首页 > 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 模块并使用其功能。
http://www.xdnf.cn/news/595765.html

相关文章:

  • 网络割接的详细流程和关键点
  • 关于常见日志的几种级别和格式
  • 加工生产调度(Johnson算法)
  • vue vite textarea标签按下Shift+Enter 换行输入,只按Enter则提交的实现思路
  • 准备好,开始构建:由 Elasticsearch 向量数据库驱动的 Red Hat OpenShift AI 应用程序
  • 手写ES6 Promise() 相关函数
  • 怎么把https://github.com项目拉到自己的github
  • 在Ubuntu18.04下搭建SadTalker让图片开口说话
  • 第五章:异步幻境 · 时间与数据的秘密
  • STM32之温湿度传感器(DHT11)
  • 纯惯导(INS)的误差来源及其对静态漂移曲线的影响
  • SS928V100(Hi3403V100)----NNN推理引擎,AMCT-ONNX模型压缩量化踩坑记录(LINUX版)
  • 数据指标体系:企业数字化转型的“数字基因“革命
  • Even Split_CodeForces - 1666E分析与解答
  • 【三轴加速度计】QMA6100P数据手册解析
  • 基于RFSOC49DR-16收16发 PCIE4.0 X8 射频采集卡
  • 航电系统之云台检测技术篇
  • 5月22总结
  • 浅聊一下搭建企业私有知识库的可行方案
  • Springboot3
  • mapbox V3 新特性,实现三维等高线炫酷效果
  • Linux(Ubuntu)新建文件权限继承问题
  • MQTT-主题(Topic)
  • DeepSeek:以开源之力,引领AI技术新风潮
  • MySQL初阶:JDBC
  • 海盗王客户端创建角色遮罩层修改成自适应窗口尺寸
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.4.10)
  • QT入门基础
  • python训练营打卡第31天
  • 【C++】控制台小游戏