模块与包的导入
一、导入官方库
我们复盘下学习python的逻辑,所谓学习python就是学习python常见的基础语法+学习你所处理任务需要用到的第三方库
类别 | 典型库 | 解决的问题 | 学习门槛 |
---|---|---|---|
基础工具 | os 、sys 、json | 操作系统交互、序列化数据(如读写 JSON 文件) | 低 |
科学计算 | numpy 、scipy | 数值计算、线性代数、信号处理 | 中 |
数据分析 | pandas 、matplotlib | 数据清洗、转换、可视化(如绘制折线图、柱状图) | 中 |
Web 开发 | Django 、Flask | 快速搭建 Web 应用(如网站后台、API 接口) | 中高 |
机器学习 | scikit-learn 、TensorFlow | 机器学习算法(分类、回归、深度学习) | 高 |
自动化脚本 | pyautogui 、pytest | 自动化测试、桌面操作自动化(如模拟鼠标键盘操作) | 低 |
网络爬虫 | requests 、Scrapy | 从网页提取数据(需注意反爬机制和法律合规) | 中 |
1.1 标准导入:导入整个库
这是最基本也是最常见的导入方式,直接使用import
语句。
# 方式1:导入整个模块
import mathprint("方式1:使用 import math")
print(f"圆周率π的值:{math.pi}")
print(f"2的平方根:{math.sqrt(2)}\n")
方式1:使用 import math 圆周率π的值:3.141592653589793 2的平方根:1.4142135623730951
1.2 从库中导入特定项
当使用from语法从库中导入特定的函数或类时,这些函数或类就可以在您的代码中直接使用,不需要添加模块名作为前缀。因为在导入时没有包括模块的完整路径,前面也不能加上库名。
# 方式2:导入特定的函数或变量
from math import pi, sqrtprint("方式2:使用 from math import pi, sqrt")
print(f"圆周率π的值:{pi}")
print(f"2的平方根:{sqrt(2)}\n")
方式2:使用 from math import pi, sqrt 圆周率π的值:3.141592653589793 2的平方根:1.4142135623730951
1.3 非标准导入:导入整个库
如下,●这将导入math
模块中定义的所有公开函数和变量。 ●和上述from同理,直接调用sin()
、cos()
等,而无需math.
前缀。
虽然 import math和 from math import *看起来都是导入了 math
模块,但它们在导入方式、作用域处理以及对命名空间的影响上有重要的区别。
-
命名空间的污染
import math
:这种方法会将整个math
模块导入到命名空间中,但是需要使用math.
前缀来访问模块内的函数或变量。这种方式保持了命名空间的整洁,因为所有的math
函数和变量都包含在math
这个模块对象中。from math import *
:这种方法将math
模块中的所有公开的函数和变量导入到当前的命名空间中,可以直接使用这些函数和变量而无需math.
前缀。这种方式可能会导致命名空间污染,特别是当有多个模块都被这样导入时,很容易发生命名冲突。 -
明确性和可维护性
import math
:明确指出了函数和变量来源于math
模块,这对代码的可读性和维护性都是有益的。其他阅读你代码的人可以清楚地看到每个函数的来源,这对大型项目和团队合作尤为重要。from math import *
:虽然代码看起来更简洁,但这种方法减少了代码的明确性。如果没有足够的上下文,很难判断一个特定的函数是来自math
模块还是其他模块,尤其是当你导入了多个模块时。
from math import *print(f"圆周率π的值:{pi}")
print(f"2的平方根:{sqrt(2)}")
圆周率π的值:3.141592653589793 2的平方根:1.4142135623730951
上述这些,如果是python内置库,可以直接导入,大部分第三方库都需要先用pip来安装。下面的模块,也就是.py文件,是不需要安装即可调用的。
模块、包的定义
模块(Module)
- 本质:以
.py
结尾的单个文件,包含Python代码(函数、类、变量等)。 - 作用:将代码拆分到不同文件中,避免代码冗余,方便复用和维护。
包(Package)
在python里,包就是库
- 本质:有层次的文件目录结构(即文件夹),用于组织多个模块和子包。
- 核心特征:包的根目录下必须包含一个
__init__.py
文件(可以为空),用于标识该目录是一个包。
使用案例
若编写一个计算圆面积的代码并保存为 circle.py
,这个文件就是一个模块。
使用时通过 import circle
导入模块,调用其中的函数(如 circle.calculate_area(5)
)。
# circle.py
import mathdef calculate_area(radius):return math.pi * radius ** 2
IDE(如 VSCode 或 PyCharm)通常会将你打开的项目文件夹设为“根目录”(或者说,运行时的工作目录)。Python 在导入模块时,会从这个根目录(以及其他一些标准位置和脚本所在的目录)开始查找。
场景1: main.py
和 circle.py
都在同一目录
目录结构:
项目根目录/ ├── main.py └── circle.py
main.py
内容:
# main.py from circle import calculate_area # 或者: import circle (然后用 circle.calculate_area)radius = 5 area = calculate_area(radius) print(f"半径为 {radius} 的圆,面积是: {area}")
运行方案:直接在终端python main.py
这里的终端可以通过左上角的查看-终端 打卡,默认的路径是你的项目根目录。
场景2: main.py
和 circle.py
都在根目录的子目录 model/
下
目录结构:
项目根目录/ └── model/├── __init__.py (推荐添加,将 model 目录标记为包)├── main.py└── circle.py
# model/main.py
from circle import calculate_area
# 或者: import circle (然后用 circle.calculate_area)radius = 5
area = calculate_area(radius)
print(f"半径为 {radius} 的圆,面积是: {area}")
运行方案:
- 运行命令:python model/main.py
- 进入路径:cd xxx(main的相对路径),然后执行python main.py (注意如果先cd后,就不能采用第一个命令了)
场景3: main.py
在根目录,circle.py
在子目录 model/
下
目录结构:
项目根目录/ ├── main.py └── model/├── __init__.py (必需添加,将 model 目录标记为一个可导入的包)└── circle.py
main.py
内容:
# main.py
from model.circle import calculate_area
# 或者: from model import circle (然后用 circle.calculate_area,因为此时你是导入了整个模块)radius = 5
area = calculate_area(radius)
print(f"半径为 {radius} 的圆,面积是: {area}")
运行方案:直接在终端python main.py
场景3
项目根目录/ ├── circle2.py └── utils/├── __init__.py (必需添加,将 model 目录标记为一个可导入的包)└── circle.py └── model/└── main.py
运行方式 python -m model.main
如果直接使用python model/main.py,会报错, 当使用 python -m model.main 时,Python 会将当前目录(即项目根目录)添加到 sys.path 的开头。
三、源代码的查看
如果第三方库是纯python写的,往往在函数上按住ctrl即可进入函数内部查看源代码。 但是很多第三方库为了性能,底层是用其他语言写的,这里我们计算机视觉库OpenCV为例。 OpenCV核心是用C++编写的(C++可以显著提高性能),但它通过Python等其他语言的接口(bindings)使得这些功能可以在Python环境中被调用。这些接口是通过一种叫做Python/C API的技术实现的,其中C++的功能被封装成Python模块,使得Python用户可以像使用纯Python编写的库一样使用OpenCV。 OpenCV的核心是用C++编写,并且已经编译成二进制文件,编译后的二进制文件可以在不同操作系统上运行,Python中的用户通常不能直接看到方法的源代码。
二进制文件是机器语言,处理器可以直接理解和执行无需翻译,二进制语言反汇编是很困难的,用二进制语言除了效果好外,也是让用户无法看到源代码,保护了自己的知识产权。
这意味着: ●二进制文件dll文件:当你在Python中导入OpenCV库(通import cv2),你实际上是在调用预先编译好的二进制文件。这些文件包含了实现OpenCV功能的可执行代码,而非人类可读的源代码。 ●接口封装:用户只能看到Python函数和对象的接口(即函数的定义,不包括实现的细节)。这也意味着无法从利用ctrl跳转到函数内部,pycharm的debugger功能同理也无法看到内部结构。 ●文档和源代码:尽管在Python中不能直接看到C++的源代码实现,用户可以参考官方文档来了解各个函数和方法的用法。如果需要查看实现细节,可以访问OpenCV的GitHub仓库查看C++源代码。
@浙大疏锦行
相关文章:
模块与包的导入
一、导入官方库 我们复盘下学习python的逻辑,所谓学习python就是学习python常见的基础语法学习你所处理任务需要用到的第三方库 类别典型库解决的问题学习门槛基础工具os、sys、json操作系统交互、序列化数据(如读写 JSON 文件)低科学计算n…...

Google设置app-ads.txt
问题: 应用上架后admob后台显示应用广告投放量受限,需要设置app-ads.txt才行。 如何解决: 官方教程: 看了下感觉不难,创建一个txt,将第二条的代码复制进行就得到app-ads.txt了。 然后就是要把这个txt放到哪才可以…...

docker安装rockerMQ
参考Docker部署RocketMQ5.x (单机部署配置参数详解不使用docker-compose直接部署)_rocketmq不推荐用docker部署-CSDN博客 镜像拉取 镜像地址: https://hub.docker.com/r/apache/rocketmq/tags 我在部署的时候最新发行版是5.1.0可以根据需求自行选择一个5.x的版本&a…...

交叉引用、多个参考文献插入、跨文献插入word/wps中之【插入[1-3]、连续文献】
我们在写论文时,需要插入大量参考文献。 有时,一句话需要引用多个文献,如:[1-3]或者[1,3,4]这种形式多个文献插入、跨文献插入。 在上一篇文章中,我们提到可以直接打“-”或者“,”,但是word导出…...

PLC双人舞:profinet转ethernet ip网关奏响施耐德与AB的协奏曲
PLC双人舞:ethernet ip转profinet网关奏响施耐德与AB的协奏曲 案例分析:施耐德PLC与AB PLC的互联互通 在现代工业自动化中,设备之间的互联互通至关重要。本案例旨在展示如何通过北京倍讯科技的EtherNet/IP转Modbus网关,将施耐德P…...
Image and depth from a conventional camera with a coded aperture论文阅读
Image and depth from a conventional camera with a coded aperture 1. 研究目标与实际意义1.1 研究目标1.2 实际问题与产业意义2. 创新方法:编码光圈设计与统计模型2.1 核心思路2.2 关键公式与模型架构2.2.1 图像形成模型2.2.2 深度可区分性准则2.2.3 统计模型与优化框架2.2…...

缺乏团队建设活动,如何增强凝聚力?
当一个团队缺乏系统性的建设活动时,成员之间容易产生疏离感、误解与信任缺失,最终影响整体执行力和目标达成。要有效增强团队凝聚力,应从设计高参与感的团队活动、结合业务与人文目标、营造持续共创的文化机制、推动跨层级协作互动等层面着手…...
特征筛选方法总结
非模型方法 一.FILTER过滤法: 1.缺失值比例(80%以上缺失则删除)/方差 注意: 连续变量只删方差为0的,因为变量取值范围会影响方差大小。 离散类的看各类取值占比,如果是三分类变量可以视作连续变量。 函数:V…...

力扣HOT100之二叉树:230. 二叉搜索树中第 K 小的元素
这道题直接用最笨的办法来做的,用递归来做,我们定义一个全局变量vector<int> element,然后使用中序遍历,每当碰到一个非空节点就将其加入到向量中,这样依赖当向量中的元素小于k时,就返回0,…...
pinia.defineStore is not a function
错误信息表明 pinia.defineStore 不是一个函数,这通常意味着 pinia 没有被正确导入或初始化。 解决方案 检查 Pinia 的导入 确保你从 pinia 中正确导入了 defineStore。正确的导入方式应该是: javascript import { defineStore } from ‘pinia’; 如果你使用的是 createPin…...
入职软件开发与实施工程师了后........
时隔几个月没有创作的我又回来了,这几个月很忙,我一直在找工作,在自考(顺便还处理了一下分手的事),到处奔波,心力交瘁。可能我骨子里比较傲吧。我不愿意着急谋生,做我不愿意做的普通…...
PCL点云库点云数据处理入门系列教材目录(2025年5月更新....)
PCL点云库点云数据处理入门系列教材目录 基础阶段 第 1 讲:PCL库简介和安装(Win10/11VS2019PCL 1.12.0)第 2 讲:PCL库中点云基本知识和数据类型结构第 3 讲:PCL库中点云数据格式PCD和PLY及其输入输出(IO&…...

Linux面试题集合(5)
把文件1的内容追加到文件2 cat 文件1>>文件2 把文件1和文件2合并成文件3 cat 文件1 文件2>文件3 使用less查看文件时,搜寻ab字符 /ab 用more和less如何查看文件 more: CtrlF -- 向下滚动一屏 CtrlB -- 返回上一屏 f -- 向下翻屏 b -- 向上翻屏 …...

python动漫论坛管理系统
目录 技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理,难度适中…...
【ubuntu24.04】pycharm 死机结束进程
windows 远程pycharm到ubuntu执行程序 pycharm 在调试过程中,内存耗尽,然后死机了 pycharm 进程 (base) rootk8s-master-pfsrv:/home/zhangbin/下载# ps -ef | grep pycharm root 121245 3230568 0 5月14 pts/8 00:00:00 /bin/bash --rcfile …...
Java 中Supplier延迟生成值的原因
在编程中,延迟生成值(Lazy Value Generation) 是指将值的计算或生成过程推迟到真正需要使用该值时才执行。这一机制的核心是避免不必要的计算,提升程序的性能和资源利用率。结合 Supplier 和 Optional 的使用场景,我们…...
设置windows10同时多用户登录方法
RDP wrapper 的版本更新停止在2017年, 找到网上其它大神更新的软件, 参考:RDPWrap v1.8.9.9 (Windows家庭版开启远程桌面、Server解除远程数量限制) - 吾爱破解 - 52pojie.cn 我的需求是在离线环境中布置,方法是&…...

Web 技术与 Nginx 网站环境部署
这里写目录标题 一. Web基础域名和DNS域名的概念域名的结构域名结构类型 Hosts文件Hosts文件的作用修改Hosts文件 DNS域名注册 网页与HTML网页概述HTML概述HTML基本标签HTML语法规则HTML文件结构 网站和主页Web1.0 与 Web2.0 静态网页与动态网页静态网页动态网页动态网页语言 H…...
分组背包问题:如何最大化背包价值?
有 N 组物品和一个容量是 V 的背包。 每组物品有若干个,同一组内的物品最多只能选一个。 每件物品的体积是 vij ,价值是 wij ,其中 i 是组号,j 是组内编号。 求解将哪些物品装入背包,可使物品总体积不超过背包容量&…...
nodejs快速入门到精通1
参考 nodejs快速入门到精通 菜鸟教程-nodejs nodejs官方文档 原因 视频免费 资料收费 笔记还是自己写吧 安装 nodejs官网 windows下: #查看nodejs版本 node -v #查看npm版本 npm -v #设置npm为淘宝镜像源 npm config set registry https://registry.npmmirror.…...

FP8精度革命:Hopper架构下大模型训练的误差传播控制方法
点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 一、FP8为何成为大模型训练的新范式? 1.1 算力需求与精度演进的矛盾 当前大语言…...

手动制做一个Transformer
本文来自I made a transformer by hand . 一直以来,笔者对 transformer 的注意力机制、qkv的理解都浮于表面,当然也不是说我看完 I made a transformer by hand 后理解有多深入,但确实加深了我对相关概念的理解,故搬运此文章&…...

已解决——如何让网站实现HTTPS访问?
一、申请SSL证书 SSL证书是HTTPS实现的关键,它由受信任的证书颁发机构(CA)签发,用于验证网站的身份并加密数据传输。以下是申请SSL证书的常见步骤: 选择证书类型 根据网站的需求和预算,选择合适的SSL证书…...

WebRTC技术EasyRTC嵌入式音视频通信SDK助力智能电视搭建沉浸式实时音视频交互
一、方案概述 EasyRTC是一款基于WebRTC技术的开源实时音视频通信解决方案,具备低延迟、高画质、跨平台等优势。将EasyRTC功能应用于智能电视,能够为用户带来全新的交互体验,满足智能电视在家庭娱乐、远程教育、远程办公、远程医疗等多种场…...
Unreal Engine: Windows 下打包 AirSim项目 为 Linux 平台项目
环境: Windows: win10, UE4.27, Visual Studio 2022 Community.Linux: 22.04 windows环境安装教程: 链接遇到的问题(问题:解决方案) 点击Linux打包按钮,跳转至网页而不是执行打包流程:用VS打开项…...
Spring MVC HttpMessageConverter 的作用是什么?
HttpMessageConverter (HTTP 消息转换器) 是 Spring MVC 框架中一个非常核心的组件,它的主要作用是在 HTTP 请求、响应体与 Java 对象之间进行双向转换。 核心作用: 读取请求体 (Request Body) 到 Java 对象: 当 Controller 方法的参数使用 …...

小乌龟git中的推送账户、作者账户信息修改
文章目录 修改git文档作者信息修改git推送用户信息参考文献 修改git文档作者信息 小乌龟中的用户信息为:作者信息,并非推送用户。 上边用户信息,修改的是文件的作者信息。如果想要修改git服务中记录的推送用户信息需要修改推送用户信息。 …...

Kubernetes MCP服务器(K8s MCP):如何使用?
#作者:曹付江 文章目录 1、什么是 Kubernetes MCP 服务器?1.1、K8s MCP 服务器 2、开始前的准备工作2.1. Kubernetes集群2.2. 安装并运行 kubectl2.3. Node.js 和 Bun2.4. (可选)Helm v3 3、如何设置 K8s MCP 服务器3.1. 克隆存储…...
Node.js聊天室开发:从零到上线的完整指南
为让你全面了解Node.js聊天室开发,我会先介绍开发背景与技术栈,再按搭建项目、实现核心功能、部署上线的流程展开,还会分享优化思路。 Node.js聊天室开发实战:从入门到上线 在即时通讯日益普及的今天,基于Node.js搭建…...

R²AIN SUITE 亮相第九届智能工厂高峰论坛
2025年5月16日,在圆满落幕的第九届智能工厂高峰论坛上,上海比孚信息科技有限公司携自主研发的 RAIN SUITE 企业AI应用中台解决方案亮相展会。本次论坛以"从互联工厂到智慧工厂"为主题,吸引了400余位行业专家、制造企业代表及产业链…...