python学习 - 模块与包的基础概念

这篇具有很好参考价值的文章主要介绍了python学习 - 模块与包的基础概念。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章首发于我的个人博客:欢迎大佬们前来逛逛

模块

python提供了一种方法,可以使得在文件编写函数的定义,然后再另一个文件中可以导入这个文件中的函数的定义继而使用。这种文件就叫做模块

模块可以导入另一个模块或者主模块中。

例如我们创建一个文件,内含两个函数,分别以不同的方式实现斐波那契数列:命名为 fibo.py

''' 斐波那契数列 '''

def fibo(n):
	a,b=0,1
	while a<n:
		print(a,end=' ')
		a,b=b,a+b
	print()

def get_fibo(n):
	l=[]
	a,b=0,1
	while a<n:
		l.append(a)
		a,b=b,a+b
	return l

然后我们在另一个主文件或者其他文件中导入这个模块

import fibo

然后我们就可以使用fibo模块中的函数了,但是此时我们只是引入模块名 fibo 并没有引入函数名,可以通过模块名来访问函数:

  1. 通过 模块名+. 来访问
  2. 可以取一个别名,然后调用别名
# 通过模块访问模块中的函数
fibo.fibo(500)
# 也可以改名
f = fibo.get_fibo
l = f(500)
print(l)
-----------
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]

调用模块的不同方式

除了上面的 import 直接导入模块,我们还可以使用下面的方式来导入模块:

  • from fibo import fibo,get_fibo:指定导入模块中的fibo和get_fibo的两个函数
  • from fibo import * :导入fibo中的所有函数。

作为脚本执行模块

在终端中作为脚本来执行此模块,这通常用于测试模块的功能。

只需要在终端中输入如下内容:

>>> python fibo.py <argument>

但是仅仅把我们的刚才的 [fibo.py](http://fibo.py) 文件作为测试是没有效果的,我们需要为 __name__ 添加 __main__ 属性:即在模块的后面加上如下的代码:

if __name__ == "__main__":
	import sys
	fibo(int(sys.argv[1]))

这样就可以这个模块像被导入一样来作为脚本执行,此代码只有在模块作为 main 文件执行时才被调用。

>> python fibo.py 50
0 1 1 2 3 5 8 13 21 34

包通常是使用用 圆点模块名 的结构化模块命名空间。名为 A.B的模块表示了名为 A的包中名为 B 的子模块。

使用包来防止模块之间出现名称相互冲突。

导入包的几种方式:

  1. 导入包的特定的模块
  2. 导入包中的子包
  3. 导入包中的模块的函数

例如我有一个模块,它的路径如下所示:

Include/test_floder/[fibo.py](http://fibo.py/)

其中我们的主文件与Include目录同级,那么我们该如何导导入 [fibo.py](http://fibo.py) 模块呢。

操作形式:from package import item

# ---- 方案一 ------
from Include.test_floder import fibo
fibo.函数名

# ---- 方案二 ------
from Include from test_floder
test_floder.子模块名.函数名

# ---- 方案三 ------
from Include.test_floder.fibo import get_fibo
get_fibo() # 直接使用模块中的函数名

我们也可以直接使用 import 的方式来导入,但是要注意,使用此方法只能导入包或者模块,即上面的方案三无法通过这种方法导入模块内的名字

from Include.test_floder import fibo # 导入了fibo模块
fibo.函数名

从 * 导入包

我们的Include.test_floder:中有很多的子模块。

如果我们执行了诸如: from Include.test_floder import * 会发生什么?

他会加载这个包中的所有的模块。

很明显这可能会花掉很长时间,并且出现期待之外的边界效应,导出了希望只能显式导入的包。

如果包的作者规定了一个 __init__.py 文件,并且给出了一个名为 __all__ 的列表,那么按照列表中给出的模块名进行导入。

例如我们的 Include/test_floder 中是全部的子模块,其中有一个__init__.py 文件,内容如下:

__all__=["fibo", "test1", "test2", "test3"]

那么当我们使用 from Include.test_floder import * 的时候,就会导入该目录中的所有的定义的四个模块

如果我们把 __all__ 的内容去掉,则我们在执行 from Include.test_floder import * 时,会发现:我们一个模块都没有导入!!! 因为我们的 * 只会导入 all 中定义的模块。

尽管某些模块设计为使用 import *时它只导出符合某种规范/模式的命名,仍然不建议在生产代码中使用这种写法。

推荐使用 from Package import specific_submodule 这类写法。文章来源地址https://www.toymoban.com/news/detail-418786.html


到了这里,关于python学习 - 模块与包的基础概念的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python | 文件、异常模块与包

    1.1 文件编码 编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑。 计算机常用编码: UTF-8 GBK Big5 UTF-8是目前全球通用的编码格式 除非有特殊需求,否则,一律以UTF-8格式进行文件编码即可。 1.2 文件的读取操作 一般,文件可以分为文本文件、视频文件、音频

    2024年02月13日
    浏览(34)
  • Python-Go python模块与包 - GO问题 - GO容量测试

    目录 go 模块与包复习(Init函数 - go mod) init函数有什么用?init函数是什么? go.mod文件是什么?有什么作用? python的模块与包 python中包的分类 1、内置模块:不需要安装,直接使用 2、三方模块:需要安装,再使用 3、自定义模块 python中自定义模块的简述 导入模块的两种方式

    2024年02月16日
    浏览(36)
  • < Python全景系列-7 > 提升Python编程效率:模块与包全面解读

    欢迎来到我们的系列博客《Python全景系列》!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法。无论你是编程新手,还是有一定基础的开发者,这个系列都将提供你需要的知识和技能。 Python全景系列的第七

    2024年02月06日
    浏览(41)
  • 模块与包

    模块--》文件 包--》文件夹 我们将类似功能的模块放到一起(包)内,要用时直接导入即可 语法: import 模块名 as 别名: ---》取别名是为了可以节省时间,简化代码 import win32process as pro # 以后直接用pro即可 模块分为三种: 1.内置模块 2.第三方模块 3.自定义模块 导入模块:

    2024年02月05日
    浏览(33)
  • python中导入模块/包的几种方式

    一、模块的导入方式 模块就是.py类型的Python文件 导入时不需要.py后缀,直接导入文件名即可 1.利用import直接导入: 语法:import module_name 使用方式:module_name.class_name或者module.func_name 2.利用import导入模块并设置一个别名 语法:import module_name as XXX 使用方式:XXX.class_name或者X

    2024年01月22日
    浏览(45)
  • Python灰帽——Scapy模块 / 数据包的构造、发送、接收、捕获

    \\\" 网络神器 \\\" scapy 是 python 的一个第三方模块,能够发送、捕获、分析和铸造网络数据包 主要功能:扫描、识别、测试、攻击、包铸造、抓包分析 在编辑器导入 scapy 包 简单构造 构造数据包 Scapy 中的分层结构 OSI 模型中的下层协议在前,以 / 隔开 Ether()/IP()/TCP() Ether 类用于设

    2024年02月22日
    浏览(44)
  • 【工具】VScode|Linux下 VScode 调试 Python 项目、模块、包的方法

    使用过 Anaconda、Jupyter、Pycharm、VScode、VS2022、pdb 这几个 IDE 去编写 python 项目或者维护 python 环境,各有各的优缺点,但 VScode yyds! 可能会被网上说得天花乱坠的 Python 配置项吓退,会被 VScode 各种插件介绍吓退,但其实它只是个纯粹的文本编辑器,近年来愈发开箱即用。 系统

    2024年02月03日
    浏览(38)
  • 【零基础入门学习Python---Python函数和模块】

    🚀 Python 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验

    2024年02月11日
    浏览(42)
  • Python和PyTorch深入实现线性回归模型:一篇文章全面掌握基础机器学习技术

    线性回归是一种统计学中的预测分析,该方法用于建立两种或两种以上变量间的关系模型。线性回归使用最佳的拟合直线(也称为回归线)在独立(输入)变量和因变量(输出)之间建立一种直观的关系。简单线性回归是输入变量和输出变量之间的线性关系,而多元线性回归

    2024年02月15日
    浏览(47)
  • “!!!保姆级教程·Python·从0开始到精通基础!!!“ “一篇文章全部学完!“ 详细过程 各种注意批注 为您的python基础学习保驾护航!

    目录  常量和表达式 变量和类型  变量是什么 变量的语法 定义变量 变量命名的规则 使用变量   变量的类型 整数  浮点数 字符串 布尔类型 其它 为什么要有这些类型? 动态类型特征 两面性 注释 注释是什么     作用          注释的语法 注释的规范 输入输出   和用户

    2024年02月21日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包