小甲鱼 模块与包上 笔记

简介: 小甲鱼 模块与包上 笔记

一 模块与包的概念

在Python中,模块(Module)和包(Package)是组织和管理代码的基本方式,有助于提高代码的可维护性和可重用性。

1.1 模块:

  • 定义: 模块是一个包含 Python 代码的文件(通常以 .py 为扩展名)。这个文件可以包含变量、函数、类等Python对象。
  • 作用: 模块的主要作用是封装和组织代码,使得代码可以更好地结构化,同时支持代码的重用。可以在其他程序中导入模块并使用其中定义的功能。
  • 示例: 假设有一个名为 example_module.py 的模块文件,其中包含如下内容:
# example_module.py
def greet(name):
    return f"Hello, {name}!"
def add_numbers(a, b):
    return a + b

在另一个Python文件中,可以通过导入该模块来使用其中的函数:

# main.py
import example_module
print(example_module.greet("Alice"))
result = example_module.add_numbers(3, 5)
print(result)

运行结果:

Hello,Alice

8

1.2 包(Package):

  • 定义: 包是一个包含模块的文件夹,该文件夹中通常包含一个特殊的 init.py 文件,以标识该文件夹为一个包。
  • 作用: 包的主要作用是将相关的模块组织在一起,形成一个命名空间。这样可以更好地管理大型项目中的代码,防止命名冲突,并提供更好的代码组织结构。
  • 示例: 假设有一个名为 my_package 的包,其结构如下:
my_package/
├── __init__.py
├── module1.py
└── module2.py

init.py 文件可以为空,也可以包含初始化代码。module1.py 和 module2.py 是包含Python代码的模块文件。在其他文件中,可以通过导入包和模块的方式来使用:

# main.py
from my_package import module1, module2
print(module1.function1())
result = module2.function2(10, 20)
print(result)

通过模块和包的使用,Python程序可以更好地组织和管理代码,实现模块化和可重用的设计。

二 创建模块

首先,我们在一个包(文件夹)里创建三个模块。

其中两个模块分别是 hello 和 hello_from_the_other_side

我们将在call_hello 中尝试导入这两个模块

值得一提的是,在jupter notebook中导入模块得先把模块以.py的文件格式放在对应文件路径下。

不然会显示导入失败。

  • hello模块内容如下:
def say_hello():
    print("hello fishc.")
def say_hi():
    print("Hi Fishc.")
def int(x):
    print(f"哈哈{x}")

里面定义了三个函数

  • hello_from_the_other_side 模块内容如下:
def say_hello():
    print("你好啊~")
def say_hi():
    print("嗨呀~")

里面定义了两个函数,其中两个函数与hello模块中的两个函数的函数名一致,但是内容不一样。

接下来我们将在call_hello这个脚本中尝试导入这两个模块。

共有四种导入模块的方式。

三 import 模块名

import hello
hello.say_hi()
hello.say_hello()

结果如下:

Hi Fishc.

hello fishc.

以这种方式导入模块时,在使用hello模块里的方法时,需要以模块名为前缀

四 from 模块名 import 方法名

使用这种方法导入hello模块的时候,再调用hello模块里的方法就不用再加模块名前缀了,代码如下:

from hello import say_hi,say_hello
say_hi()
say_hello()

结果如下:

Hi Fishc.

hello fishc.

虽然调用hello模块里的方法不用再加模块名前缀,但是在导入hello模块时,如果要调用模块的全部方法,还是很麻烦。

接下来介绍的方法 **from 模块名 import ***

就可以解决这个问题

五 from 模块名 import *

from hello import *
say_hi()
say_hello()

结果如下:

Hi Fishc.

hello fishc.

可以使用*代替所有函数,这种调用方式的优势是不用再一个个地去调用模块里的方法,但是容易造成命名冲突。

如下面这两个例子:

int("250")

结果如下:

哈哈250

这里的结果本意是将250这个字符串变成整数,但是执行结果却是打印了"哈哈250",这是因为call_hello脚本里本身也具有int()这个函数,所以发生了冲突,脚本执行int()时,选择执行模块里的int()方法

脚本中导入多个模块时,这多个模块具有相同的方法时,也会发生冲突,如下:

from hello import *
from hello_from_the_other_side import *
say_hi()
say_hello()

结果如下:

嗨呀~

你好啊~

可以看到,如果两个方法的函数名相同,较迟导入模块的方法将覆盖较早导入模块的方法。

为了解决这种问题,我们可以使用import 模块名 as 自定义名字 的方法

六 import 模块名 as 自定义名字

import hello_from_the_other_side as h
from hello import *
h.say_hi()
h.say_hello()

结果如下:

嗨呀~

你好啊~

可以看到,hello模块比hello_from_the_other_side更晚导入,但是我们使用import 模块名 as 自定义名字 的方法就可以很好地避免多个模块导入命名冲突的问题。

相关文章
|
7月前
|
Python
小甲鱼 模块与包 中 笔记
小甲鱼 模块与包 中 笔记
71 0
|
7月前
|
前端开发 测试技术 数据库
网上订餐系统的设计与实现(论文+源码)_kaic
网上订餐系统的设计与实现(论文+源码)_kaic
|
7月前
|
存储 测试技术
俄罗斯方块游戏系统的设计与实现(源码+论文)_kaic
俄罗斯方块游戏系统的设计与实现(源码+论文)_kaic
|
Java C++ Python
PYTHON知识点学习-函数(上)[你还记得奥特曼的口号吗?]
PYTHON知识点学习-函数(上)[你还记得奥特曼的口号吗?]
60 0
|
自然语言处理 前端开发 Java
网上投票系统的设计与实现(论文+源码)_kaic
随着全球Internet的迅猛发展和计算机应用的普及,特别是近几年无线网络的广阔覆盖以及无线终端设备的爆炸式增长,使得人们能够随时随地的访问网络,以获取最新信息、参与网络活动、和他人在线互动。为了能及时地了解民情民意,把握人们近期关注的内容,政府机构以及各大门户网站等单位会将一些热点话题以投票的形式发布到他们的网站上面,供人们在线投票。因此,网络在线投票系统应运而生。 本文在此情况下设计了一款网上线投票系统。首先,结合实际的应用开发情况,对该系统做了详细的需求分析。然后给出该系统的结构和各功能模块的分析,通过详细的结构和数据库表的设计,最终构建出一个基于Web的、以Struts2框架和MySQ
|
人工智能 算法 Java
算法笔记——高精度算法(附源码)
📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c++阶段,因为最近参加新星计划算法赛道(白佬),所以加快了脚步,果然急迫感会增加动力>——目标Windows,MySQL,Qt,数据结构与算法,Linux,多线程,会持续分享学习成果和小项目的 📖作者主页:热爱编程的小K 📖专栏链接:算法笔记 🎉欢迎各位→点赞👏 + 收藏💞 + 留言🔔​ 💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🐾 ———————————————— 版权声明:本文为CSDN博主「热爱编程的小K」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
|
算法 数据处理 索引
【Python 小白到精通 | 课程笔记】第三章:数据处理就像侦探游戏(函数和包)
【Python 小白到精通 | 课程笔记】第三章:数据处理就像侦探游戏(函数和包)
256 0
【Python 小白到精通 | 课程笔记】第三章:数据处理就像侦探游戏(函数和包)
老外的个人网站原来是这样设计的:17个最佳范例给你灵感
作家写书,歌手出唱片,人们选择各种方式呈现最佳的自己。对于UI/UX设计师而言,我想,一个设计精美的个人网站,一定会是一种相当不错的方式。无论你是想要展示自己的设计作品,还是分享自己的设计经验和理念,还是吸引互动增加灵感,还是渴望获得一份更好的工作,一个能充分展示你设计才能的个人网站,一定能够让人更好的了解你,并且记住你。
1604 0
下一篇
DataWorks