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

Python编程——模块、包和__init__.py

1. 模块

Python中的一个文件即为一个模块(Module),一个模块引用另外一个模块的变量、函数或类时,使用import来导入。模块名即文件名。

fibo.py 文件下有如下代码:

    def fib(n):    # write Fibonacci series up to na, b = 0, 1while a < n:print(a, end=' ')a, b = b, a+bprint()

那么在main.py文件中如下使用fibo模块。

    import fibofibo.fib(100)

或者直接导出指定函数,此方法可能导致同名函数被覆盖导致代码异常。

    from fibo import fibfib(100)

2. 包

2.1. 基本用法

包(Package)是模块的一个集合,一个包中可以有多个子包。包名即目录名,包目录下必须包含__init__.py文件,否则只是一个多模块的文件夹。
在这里插入图片描述

在main.py中导入algo.real模块:

    import algo.real import algo.complexprint(algo.real.add(1, 2))

    from algo import real, complexprint(real.add(1, 2))

2.2. 高级用法

2.2.1. 导入所有模块

如果包中的模块非常多,想一次全部导入包中的模块,则需要在__init__.py中指定所有导出的模块。为什么不建议__init__.py文件留空呢?留空默认表示导出所有包中的模块。如果包中有一些单元测试的模块,只用于开发自测。如果用户使用from XXX import *导入所有模块,就会导致单元测试模块也被执行,这是不符合用户预期的。所以包设计者应该显式在__init__.py中导出所有模块,避免这种可能的异常。

    # coding=utf-8from . impourt real, complex__all__ = ['real', 'complex']

然后在main.py中调用:

    # coding=utf-8from algo import *# 导入algo包中的__init__.py模块中__all__记录的所有模块print(real.add(1, 2))print(complex.sub(2, 1))

2.2.2. 设置公共信息

可以在__init__.py中设置包版本和作者信息,还可以设置一些包的变量和公共函数等。

__version__ = "1.0"
__author__ = "Your Name"def init_pakage():pass

3. 搜索路径

3.1. 模块搜索路径

当导入一个名为 spam 的模块时,解释器首先会搜索具有该名称的内置模块。 这些内置的模块的名称在 sys.builtin_module_names 中列出。 如果未找到,它将在变量 sys.path 所给出的目录列表中搜索名为 spam.py 的文件。 sys.path 是从这些位置初始化的:

  • 被命令行直接运行的脚本所在的目录(或未指定文件时的当前目录)。

  • PYTHONPATH (目录列表,与 shell 变量 PATH 的语法一样)。

  • 依赖于安装的默认值(按照惯例包括一个 site-packages 目录,由 site 模块处理)。

所以要增加搜索路径,可以在命令行中先行设置环境变量PYTHONPATH,再执行脚本即可。也可以在代码中

sys.path.append(‘/ufs/guido/lib/python’)

3.2. 相对路径

当一个包有多个子包时,子包导入模块时,其默认路径并不是子包当前路径,此时如果想指定当前路径,则需要使用相对路径导入。

    from . import sub_math# 从当前目录导入模块sub_mathfrom .sub_pack import *# 从当前目录的子包sub_pack中导入所有模块from .. import utils## 从上级目录导入模块utilsfrom ..filters import equalizer# 从上级目录的包filters中导入模块equalizer

相关文章:

Python编程——模块、包和__init__.py

1. 模块 Python中的一个文件即为一个模块(Module)&#xff0c;一个模块引用另外一个模块的变量、函数或类时&#xff0c;使用import来导入。模块名即文件名。 如fibo.py 文件下有如下代码&#xff1a; def fib(n): # write Fibonacci series up to na, b 0, 1while a <…...

220kV110kV10kV变电站初步设计

摘要 由于国内人民生活水平的提高&#xff0c;科技不断地进步&#xff0c;控制不断地完善&#xff0c;从而促使变电站设计技术在电气系统领域占据主导权&#xff0c;也使得220kV/110kV/10kV变电站被广泛应用。在变电站系统设计领域中&#xff0c;220kV/110kV/10kV变电站成为目…...

Git企业开发级讲解(一)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、Git初识1、提出问题2、如何解决--版本控制器3、注意事项 二、Git 安装1、Linux-centos2、…...

【微信支付通知】对resource解密 AEAD_AES_256_GCM算法工具类

微信支付JSPIA支付-支付通知中&#xff0c;对resource解密 import javax.crypto.Cipher; import javax.crypto.spec.GCMParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.security.Key; import java.util.Base64;public class AEADDecryption {public sta…...

JVM虚拟机:垃圾回收之三色标记

本文重点 在前面的课程中我们已经学习了垃圾回收器CMS和G1,其中CMS和G1中的mixedGC都存在四个过程,这四个过程中有一个过程叫做并发标记,也就是说程序一边运行,一边标记垃圾。这个过程最困难的是:如果在标记垃圾的时候,如果对象的引用关系发生了改变,此时应该如何处理?…...

唯坚持而已

写在前面 假如有一天我失业了&#xff1a; 大葱一毛二一斤&#xff0c;卖一三轮车三百斤还不到40块钱&#xff0c;我会回乡种大葱么&#xff1f; 小麦、玉米块儿八毛的一斤&#xff0c;亩产1000斤&#xff0c;五亩地&#xff0c;一年一茬小麦一茬玉米&#xff0c;才万把块钱&a…...

【大语言模型】Docker部署清华大学ChatGLM3教程

官方地址&#xff1a;https://github.com/THUDM/ChatGLM3 1 将代码保存至本地 方法1&#xff1a; git clone https://github.com/THUDM/ChatGLM3 方法2&#xff1a; https://github.com/THUDM/ChatGLM3/archive/refs/heads/main.zip 2 创建Docker文件 注&#xff1a;请先…...

详解 KEIL C51 软件的使用·设置工程·编绎与连接程序

详解 KEIL C51 软件的使用建立工程-CSDN博客 2. 设置工程 (1)在图 2-15 的画面中点击 会弹出如图 2-16 的对话框.其中有 10 个选择页.选择“Target” 项,也就是图 2-16 的画面. 图 2-16 在图 2-16 中,箭头所指的是晶振的频率值,默认是所选单片机最高的可用频率值.该设置值与单…...

小程序实现语音识别功能

不废话&#xff0c;直接上代码 <template><view><u-popupround"16" :show"recordShow" :close-on-click-overlay"false":safe-area-inset-bottom"false"close"close"open"open"><view clas…...

判断两层对象中是否有空的value值

1、方法 hasEmptyValue(obj) {for (var key in obj) {if (obj.hasOwnProperty(key)) {var value obj[key];// 检查第一层属性值是否为空if (value null || value undefined || value ) {return true;}// 检查第二层属性值是否为空if (typeof value object) {for (var inn…...

【SQLite】环境安装

SQLite - C/C SQLite简介 SQLite 是一种轻量级的嵌入式数据库引擎&#xff0c;它在程序中直接访问数据库文件而不需要独立的数据库服务器。以下是一些关于 SQLite 的简介信息&#xff1a; 嵌入式数据库引擎&#xff1a; SQLite 是一种嵌入式数据库引擎&#xff0c;这意味着它…...

【QT】飞机大战

0 项目简介 飞机大战是我们大家所熟知的一款小游戏&#xff0c;本教程就是教大家如何制作一款自己的飞机大战 首先我们看一下效果图 玩家控制一架小飞机&#xff0c;然后自动发射子弹&#xff0c;如果子弹打到了飞下来的敌机&#xff0c;则射杀敌机&#xff0c;并且有爆炸的特…...

linux最全基础入门命令(简单明了建议收藏)

Linux是一种开源的操作系统&#xff0c;它有许多强大的命令行工具&#xff0c;可以让用户对系统进行各种操作和管理。本文将介绍一些Linux最常见最全的命令&#xff0c;以及它们的用法和示例。 目录 ls:用于列出目录中的文件和子目录cd:用于切换当前工作目录pwd:于显示当前工作…...

dgl 的cuda 版本 环境配置(dgl cuda 版本库无法使用问题解决)

1. 如果你同时有dgl dglcu-XX.XX 那么&#xff0c;应该只会运行dgl &#xff08;DGL的CPU版本&#xff09;&#xff0c;因此&#xff0c;你需要把dgl(CPU)版本给卸载了 但是我只卸载CPU版本还不够&#xff0c;我GPU 版本的dglcu依旧不好使&#xff0c;因此吧GPU版本的也得卸载…...

回文数和复利的威力(C#)

题目&#xff1a;回文数 回⽂数指正序&#xff08;从左到右&#xff09;和倒序&#xff08;从右到左&#xff09;读都是⼀样的整数。 输⼊⼀个数&#xff0c;判断是否是回⽂数 样例输⼊ 2397 输出no 样例输⼊ 2992 样例输出yes 输⼊的整数⼤于0&#xff0c;⼩于1000000。如…...

【Java】面向对象程序设计 课程笔记 Java核心类

&#x1f680;Write In Front&#x1f680; &#x1f4dd;个人主页&#xff1a;令夏二十三 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;Java &#x1f4ac;希望你看完之后&#xff0c;能对你有所帮助&#xff0…...

16个值得推荐的.NET ORM框架

什么是ORM? ORM 是 Object Relational Mapping 的缩写&#xff0c;译为“对象关系映射”&#xff0c;是一种程序设计技术&#xff0c;用于实现面向对象编程语言里不同类型系统的数据之间的转换。它解决了对象和关系型数据库之间的数据交互问题&#xff0c;ORM的作用是在关系型…...

Git 进阶使用

一. Git图形化操作 1.1.什么是图形化管理工具 图形化管理工具是一种通过可视化界面来操作计算机系统或应用程序的软件工具。在软件开发中&#xff0c;它通常用于管理和操作版本控制系统&#xff08;如Git、SVN等&#xff09;以及代码开发环境&#xff08;如IDE&#xff09;。与…...

【微软技术栈】C#.NET 泛型数学

本文内.NET 7 为基类库引入了新的数学相关泛型接口。 提供这些接口意味着可以将泛型类型或方法的类型参数约束为“类似于数字”。 此外&#xff0c;C# 11 及更高版本允许定义 static virtual 接口成员。 由于必须将运算符声明为 static&#xff0c;因此这一新的 C# 功能可用于在…...

【nlp】1.1文本处理的基本方法

文本处理的基本方法 1 什么是分词2 什么是命名实体识别3 什么是词性标准1 什么是分词 分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形…...

互联网大厂Java面试场景深度剖析:核心技术栈与代码案例实录

互联网大厂Java面试场景深度剖析&#xff1a;核心技术栈与代码案例实录 在互联网大厂面试Java岗位&#xff0c;除了扎实的技术基础&#xff0c;还离不开对核心技术栈的全方位掌握。本文结合真实对话场景和代码案例&#xff0c;为求职者深度剖析面试流程与思路。 面试场景趣味对…...

iPhone上跑Transformer模型?手把手教你用EfficientFormer部署移动端AI应用

iPhone上部署EfficientFormer&#xff1a;移动端Transformer模型实战指南 当苹果在2023年发布会上演示Stable Diffusion在iPhone 15 Pro上实时运行时&#xff0c;整个科技圈都意识到&#xff1a;移动端AI推理的时代已经到来。作为移动开发者&#xff0c;你是否也想过在自己的Ap…...

剪映API全栈开发指南:构建高效视频自动化处理系统

剪映API全栈开发指南&#xff1a;构建高效视频自动化处理系统 【免费下载链接】JianYingApi Third Party JianYing Api. 第三方剪映Api 项目地址: https://gitcode.com/gh_mirrors/ji/JianYingApi 在视频内容工业化生产的浪潮中&#xff0c;内容创作者和技术开发者面临着…...

WebDataset商业应用:企业级深度学习项目的数据管理策略

WebDataset商业应用&#xff1a;企业级深度学习项目的数据管理策略 【免费下载链接】webdataset A high-performance Python-based I/O system for large (and small) deep learning problems, with strong support for PyTorch. 项目地址: https://gitcode.com/gh_mirrors/w…...

类器官 vs 器官芯片:下一代体外模型如何提升药物研发效率【曼博生物-CNBIO】

类器官与器官芯片&#xff08;OOC&#xff09;&#xff1a;临床前研究模型的新趋势 一、介绍 类器官与器官芯片&#xff08;OOC/MPS&#xff09;是当前体外模型研究的两大核心技术路线。:contentReference[oaicite:0]{index0} 类器官是三维微型器官&#xff0c;通常由干细胞…...

GLM-OCR效果展示:复杂版式、表格、公式识别案例全解析

GLM-OCR效果展示&#xff1a;复杂版式、表格、公式识别案例全解析 1. 专业级OCR的新标杆 在文档数字化处理领域&#xff0c;传统OCR技术往往在遇到复杂版式、数学公式或嵌套表格时束手无策。GLM-OCR的出现彻底改变了这一局面——这个轻量级多模态OCR模型在权威文档解析基准测…...

别再写“超级循环“了!裸机系统跑得快的秘密,全在架构上

裸机开发这件事&#xff0c;门槛低&#xff0c;天花板高。随便写个while(1)主循环&#xff0c;里面堆上一堆if判断&#xff0c;程序确实能跑起来。但跑起来和跑得好&#xff0c;完全是两码事。很多工程师写了三五年裸机代码&#xff0c;项目越来越大&#xff0c;代码越来越乱&a…...

AI 模型推理 GPU 调度策略优化

AI 模型推理 GPU 调度策略优化 随着人工智能技术的快速发展&#xff0c;AI 模型推理在医疗、金融、自动驾驶等领域的应用日益广泛。GPU 资源的高效调度成为提升推理性能的关键挑战。如何优化 GPU 调度策略&#xff0c;以降低延迟、提高吞吐量并减少资源浪费&#xff0c;成为研…...

LFM2.5-1.2B-Thinking-GGUF在软件测试中的应用:自动化生成测试用例与代码审查

LFM2.5-1.2B-Thinking-GGUF在软件测试中的应用&#xff1a;自动化生成测试用例与代码审查 1. 引言&#xff1a;当AI遇上软件测试 "测试工程师80%的时间都在写重复的测试用例"——这个行业痛点正在被AI改变。想象一下&#xff0c;当你拿到一份需求文档&#xff0c;A…...

OpenClaw模型微调集成:Qwen3-14b_int4_awq领域适配实战

OpenClaw模型微调集成&#xff1a;Qwen3-14b_int4_awq领域适配实战 1. 为什么需要领域专用模型 去年我在处理法律合同自动化生成项目时&#xff0c;发现通用大模型在专业术语和条款逻辑上总是差强人意。模型要么生成过于笼统的表述&#xff0c;要么在引用法律条文时出现事实性…...