Python Module 模块详解:模块导入与项目管理的最佳实践

news2024/11/15 7:20:01

Python Module 模块详解:模块导入与项目管理的最佳实践

文章目录

  • Python Module 模块详解:模块导入与项目管理的最佳实践
      • 一 准备示例代码
      • 二 引用 module
      • 三 大型项目的模块管理
      • 四 完整文件示例
      • 五 源码地址

本文详细介绍了 Python 中模块(Module)的定义与使用,展示了如何通过 importfrom...import 等方式引入模块及其函数。文中提供了多种模块导入的方法,包括模块的重命名、从模块中导入单个或多个函数等。此外,还讲解了大型项目中的模块管理,如何通过 __init__.py 文件实现模块初始化,并展示了如何在目录结构中引用其他文件的函数。本文通过多个实例和完整代码,帮助读者掌握模块的使用技巧,提升 Python 项目的组织与管理效率。

这个module 模块的示例需要的脚本: file.py,me.py,Module 模块.py 和 module 文件夹(模块),代码见 Gitee 或者 GitHub。

一 准备示例代码

准备 file.py

# file.py
def create_name():
    return "new_file.txt"


def create_time():
    return "new_file_time.txt"

二 引用 module

1 第一种 import file

import file

print("1", file.create_name())

2 第二种 from

from file import *

print("2", create_name())
print("2", create_time())

3 第三种 重命名

import file as f1

print("f1:", f1.create_name())

# 重命名的用法对比
class File02:
    def create_name(self):
        return "new_file02.txt"
# 这里相当于 as f1 可以暂时这么理解
f2 = File02()
# 这里和 f1 的调用方法类似
print("f2:", f2.create_name())

4 第四种 从模块中引用函数

from file import create_name

print(create_name())

5 第五种 从模块中引用多个函数

# 从模块中引用多个函数
from file import create_name, create_time

print(create_name(), create_time())

三 大型项目的模块管理

module 和 class 类似, module 看到一个 __init__.py 文件,和 class 里的 def __init__(self)类似,在里面写上要如何初始化你的 files 目录。例如在中写

# files/__init__.py

from .video import get_video_size # 点运行会报错的

我们就可以在filesimport get_video_size

from module.files import get_video_size

print(f"get_video_size = ", get_video_size())

目录结构为

在这里插入图片描述

不过和 video.py 同级的 text.py 就无法通过这种 import 方式获取到 text.py 的功能。想使用 text.py 的功能,可以这样 import。

# from module.files import create_name    # 这里会报错
# 获取到 text.py 的功能
import module.files.text

print(module.files.text.create_name())

# 或者这样:
from module.files import text

print(text.create_name())

四 完整文件示例

这是 Module 模块.py 脚本。

# This is a sample Python script.

# Press ⌃R to execute it or replace it with your code.
# Press Double ⇧ to search everywhere for classes, files, tool windows, actions, and settings.


def print_hi(name):
    # Use a breakpoint in the code line below to debug your script.
    print(f'Hi, {name}')  # Press ⌘F8 to toggle the breakpoint.

# 文件中的代码 module 中的 file.py

# 引用 module, 可以表述为 引用库,引用包,引用代码
# me.py

# 引用 module 这里时 me.py 中的内容 start
# 第一种
import file

print("1", file.create_name())

# 第二种更偷懒
from file import *

print("2", create_name())
print("2", create_time())

# 给模块重命名
import file as f1

print("f1:", f1.create_name())

# 从模块中引用函数
from file import create_name

print(create_name())

# 从模块中引用多个函数
from file import create_name, create_time

print(create_name(), create_time())


class File02:
    def create_name(self):
        return "new_file02.txt"


f2 = File02()
print("f2:", f2.create_name())

from module.files import get_video_size

print(f"get_video_size = ", get_video_size())


# from files import create_name    # 这里会报错
# 获取到 text.py 的功能
import module.files.text

print(module.files.text.create_name())

# 或者这样:
from module.files import text

print(text.create_name())

# 引用 module 这里时 me.py 中的内容 end


# 大项目的模块管理
# 见 module 中的 files

# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    print_hi('Module 模块')

# See PyCharm help at https://www.jetbrains.com/help/pycharm/

复制粘贴并覆盖到你的 main.py 中运行,运行结果如下。

1 new_file.txt
2 new_file.txt
2 new_file_time.txt
f1: new_file.txt
new_file.txt
new_file.txt new_file_time.txt
f2: new_file02.txt
get_video_size =  20
text new_file.txt
text new_file.txt
Hi, Module 模块

五 源码地址

代码地址:

国内看 Gitee 之 Module 模块.py

国外看 GitHub 之 Module 模块.py

这个module 模块的示例需要的脚本: file.py,me.py,Module 模块.py 和 module 文件夹(模块),代码见 Gitee 或者 GitHub。

引用 莫烦 Python

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2135176.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yolo自动化项目实例解析(二)ui页面整理

我们在上一章整理main.py 的if __name__ __main__: 内容还留下面这一段, app QApplication(sys.argv) # 初始化Qt应用ratio screen_width / 2560 # 分辨率比例# 设置全局字体大小# 计算字体大小base_font_size 13# 基准字体大小,适合1920*1080分辨…

不要在这些场景中使用LLM或生成式AI

虽然但是,LLM并不是AI的全部,并不是所有的AI应用场景都适合生成式AI。 在某些用例中,应避免或极其谨慎地使用LLM和GenAI,二者可能并非最佳解决方案。 1. 高风险决策 LLM和生成式AI不适合做出可能对现实世界产生重大影响的高风险…

别人做谷歌seo为什么流量比你多?

如果你确认你的网站技术层面没有问题,那其实无非就是两方面,关键词没选好和用户体验不够好,不要妄想一步登天,选那些看起来搜索量很大的热门关键词,这种属于大家都在做,竞争是非常激烈的,在你的…

华宇TAS应用中间件斩获2024鲲鹏应用创新大赛北京赛区总决赛二等奖!

近日,以“数智未来 因你而来”为主题的创客北京2024鲲鹏应用创新大赛华鲲振宇北京赛区总决赛在北京鲲鹏联合创新中心圆满举办,华宇TAS应用中间件凭借产品竞争力、产品兼容性、技术领先性等优势脱颖而出,斩获鲲鹏原生开发赛道(泛政…

AI为云游戏带来的革新及解决方案:深度技术剖析与未来展望

近期,科技巨头埃隆马斯克与热门国产游戏《黑神话:悟空》的互动,再次引发了公众对AI技术在游戏产业中应用的关注。马斯克,作为特斯拉和SpaceX的掌门人,不仅在科技领域引领风骚,其个人兴趣也广泛涉猎&#xf…

关于使用Mybatis-Plus 自动填充功能失效问题

关于使用Mybatis-Plus 自动填充功能失效问题 关于使用Mybatis-Plus 自动填充功能失效 首先遇到的第一个问题 自动填充失败 或被填充为NULL 原因:字段类型 与 填充类型 不一致导致 解决方法:将类型替换成一致的类型 全部为Date 或 LocalDateTime 即可解…

828华为云征文 | 使用华为云X实例部署图数据库Virtuoso并存储6500万条大数据的完整过程与性能测评

前言 在大数据时代,图数据库以其强大的关系处理能力在复杂网络、社交媒体分析、知识图谱等领域得到了广泛应用。而在云计算的蓬勃发展下,使用云服务器进行图数据库的部署与管理变得更加方便高效。本篇文章将详细介绍如何在华为云X实例上部署开源图数据…

CANFD和CAN最主要的区别

随着汽车电子的高速发展,车内信息的急剧增多,传统的CAN总线的数据传输能力已经很难满足车辆ECU的数据传输需求了,此时CANFD就应运而生了。 CANFD和CAN最主要的区别就是CANFD的ID段和数据段能够以不同的速率传输数据,这就保证了即…

【大模型专栏—进阶篇】语言模型创新大总结——“后起之秀”

大模型专栏介绍 😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本文为大模型专栏子篇,大模型专栏将持续更新,主要讲解大模型从入门到实战打怪升级。如有兴趣,欢迎您的阅读。 &#x1f4…

Prompt最佳实践|指定任务步骤,让ChatGPT不懵逼

在OpenAI的官方文档中已经提供了[Prompt Enginerring]的最佳实践,目的就是帮助用户更好的使用ChatGPT 编写优秀的提示词我一共总结了9个分类,本文讲解第4个分类:指定任务步骤 提供更多的细节要求模型扮演角色使用分隔符指定任务步骤提供样例…

e冒泡排序---复杂度O(X^2)

排序原理: 1.比较相邻的元素。如果前一个元素比后一个元素大,就交换这两个元素的位置。 2.对每一对相邻元素做同样的工作,从开始第一对元素到结尾的最后一对元素。最终最后位置的元素就是最大值, public class 冒泡排序 {public static void main(String[] args) {I…

点亮第一盏LED灯 4): stm32CubeMX配置时钟

嵌入式入门,继续点亮第一盏LED灯,在Stm32CubeMX这个图形界面,一共是需要配置2个地方,1是GPIO引脚,2是时钟,上一篇文章已经将引脚PC13配置为输出引脚,这个引脚需要输出的是低电平,这篇…

这才几天,京东又又又又又又加薪了!

京东 今天的最新消息,京东又又又又又加薪了。 距离我们 京东宣布大幅上调校招薪资 的推文发布才一周多点的时间,京东又宣布加薪了。 好家伙,算上这次,光 2024 年京东就已经宣布了 6 次调薪了: 2024 年初,京…

多文件多子目录makefile

这里写目录标题 1 makefile原理2 MakeFile步骤3 多文件多子目录Makefile实例4 总结附录一:常用Bash指令附录二:常用批处理变量附录三:常用makefile指令 1 makefile原理 编译过程是将高级语言(如C、C等)源代码转换为可…

如何利用数字化智慧法务管理平台,提升企业合规与治理水平?

在当今这个日新月异的时代,企业管理正面临着前所未有的挑战与机遇。随着数字化浪潮的汹涌澎湃,企业治理水平的提升已不再是简单的管理升级,而是需要借助科技的力量,实现智慧化、精细化的管理。而智慧法务管理平台,正是…

电子电路产业园废水处理与资源回收的创新实践

随着电子产品的普及和技术革新步伐的加快,电子电路制造业已成为推动现代科技发展的关键力量之一。然而,随之而来的环保问题不容忽视。电镀工艺作为电子电路生产中的一个核心环节,其产生的含镍废水处理成为了企业必须面对的重要课题。本文将探…

【组件】前端js HEIC/HEIF 转换为JPEG、PNG或GIF格式 苹果格式

【组件】前端js HEIC/HEIF 转换为JPEG、PNG或GIF格式 Heic2any: Client-side conversion of HEIC/HEIF image files to JPEG,PNG, or GIF in the browser.https://alexcorvi.github.io/heic2any/#demo GitHub - alexcorvi/heic2any: Converting HEIF/HEIF image formats to PN…

redis 中缓存 百万级别表的查询数据 出错:Query execution was interrupted

项目背景:项目需要 首检合格率 这个结果,但是sql执行非常慢,就想着使用redis来优化接口的速度。现在我需要将数据库查询结果存储到redis,但是就是这一小步,也非常困难。我是用定时任务来实现上面的目的。 Component S…

基于android studio开发的仿QQ聊天软件源代码+数据库+实验报告

安卓客户端基于java 编程语言 在android studio 环境中开发。 内部图片资源很大一部分是反编译手机QQapp 获得的。 服务器端技术路线 聊天系统服务器基于Java Socket网络编程和并发编程、多线程技术、jdbc实现。 通过哈希表(hashmap)存储来自每一个向客…

读书笔记:《程序员修炼之道——从小工到专家》

前言 此书有两个版本,我读的是第一版,大学时买了略略翻过,当时太懵懂无法理解书中提出的观点,看了也记不得,感觉比较适用于有过1~2个项目工作经验的同学,初学者不一定能看得懂,工作之后看&…