前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python基础——模块【模块的介绍,模块的导入,自定义模块,*和__all__,__name__和__main__】

python基础——模块【模块的介绍,模块的导入,自定义模块,*和__all__,__name__和__main__】

作者头像
用户11029137
发布2024-04-04 10:53:18
770
发布2024-04-04 10:53:18
举报
文章被收录于专栏:编程学习编程学习

一,模块的介绍

1,什么是模块 在 Python 中,模块是一种组织 Python 代码的方法。模块可以包含定义(例如类、函数和变量)和可执行代码。如果当我们要使用的功能在模块中时,我们就可以导入模块,使用模块中的相应功能。也就是说:模块可以帮助你将代码组织得更有逻辑,并允许你将代码划分为更小的、更可管理的部分。 例如,我们想实现一些与时间相关的功能,我们就可以直接导入python中现有的time模块,然后调用time模块的功能帮我们实现。

二,模块的导入和使用

模块的导入一般写在文件的开头(这一点和C语言中,要包含对应的头文件类似,要写在开头) 导入方式汇总:

下面我们介绍几种基本的导入方式:

1,直接导入模块(得到模块)

直接导入模块后,我们就可以用模块里面的全部功能

(1)导入

语法:

代码语言:javascript
复制
import 模块名
# 或者一次性导入多个:
import 模块名, 模块名

示例,导入time模块

代码语言:javascript
复制
import time  # 导入time模块
(2)使用

当我们只导入了模块,没有具体到功能名的时候,在使用时,我们需要通过模块来找功能 语法:

代码语言:javascript
复制
模块名.功能

示例(导入time模块,并且使用里面的sleep功能):

代码语言:javascript
复制
import time  # 导入time模块
time.sleep(10)  # 通过 . 操作符使用功能

sleep的作用就是:让程序暂停运行n

2,从模块中导入功能(得到功能)

(1)导入

语法:

代码语言:javascript
复制
from time import sleep # 导入time模块的sleep功能

示例:

代码语言:javascript
复制
from time import sleep # 导入time模块的sleep功能
(2)使用

这时候,我们已经得到了功能,就无须通过模块来找到功能了,示例:

代码语言:javascript
复制
from time import sleep  # 导入time模块的sleep功能
sleep(10)  # 直接使用功能

(注意:这时候我们只能使用sleep功能,而不能使用time模块里面的其他功能,因为我们只指定导入了这个功能)

3,设置别名

当然,正如本文的第一张图片,我们可以在导入以后,对模块或者是功能进行别名设置:

代码语言:javascript
复制
from time import sleep as al  # 导入time模块的sleep功能,给sleep设置别名:sl
al(10)  # 通过别名al来使用sleep功能

三,自定义模块

1,如何自定义模块

自定义模块其实就是创建一个以.py结尾的python文件,然后我们可以在这个文件里面写功能 (注意:自定义模块的命名要符合标识符的命名规则) 当我们需要调用这个文件里面的功能时,只需要导入这个模块就可以(模块名就是文件名) 例如,我们创建一个自定义模块:

使用它:

代码语言:javascript
复制
import test  # 导入我们的自定义模块
test.ptint1()  # 使用里面的功能

输出:

在这里插入图片描述
在这里插入图片描述

2,同名功能的选择

注意:当导入多个不同的模块,但模块内有同名功能,当调用这个同名功能时,调用的是后面导入的模块的功能 如: 我们在test1test2模块里面写入同名功能:

运行下面代码:

代码语言:javascript
复制
from test1 import my_ptint
from test2 import my_ptint
my_ptint()

输出:

3,* 和__all__

* 导入: 在Python中,使用 from module_name import * 表示导入模块中的所有内容。 这会导入模块中的所有变量、函数和类,我们可以在当前命名空间中直接使用它们。 (注意:这种方法可以快速地导入模块中的所有内容,但可能导致命名冲突,因此通常不推荐使用) __all__: __all__ 是模块中的一个特殊变量,它定义了模块中应该被导入的内容。 当使用 from module_name import * 时,只有 __all__ 指定的内容会被导入。(换句话说,__all__ 限制了 * 导入的行为)

示例:

这时候我们使用my_print3就会报错,因为__all__变量限制了*的导入

4,模块中的测试代码

假如我们在文件里面写好功能以后,想测试一下这些功能,如:

输出结果是正常的,并且我们不打算删除这些测试代码。 但是,当我们在别的文件里面,对刚刚的模块进行导包:

代码语言:javascript
复制
from test1 import my_print1
my_print1()

输出结果:

可见:在我们导包的时候,测试语句也被输出了 这是因为: 我们from 模块的时候,其实是相当于把模块文件执行了 若模块里面有测试代码,则在我们调用的时候,也会运行这些测试代码(就如上面输出的前三行)

为了解决这个问题我们可以使用__name__变量和__main__变量:

在Python中,__main__ 是一个特殊的模块,它主要用于执行模块中的main()函数。当你直接运行一个Python文件时,这个文件中的代码会进入__main__模块。换句话说,__main__模块是Python解释器直接运行的入口。 在Python中,一个模块的__name__属性会自动设置为’__main__',如果你直接运行一个模块,你可以通过这个属性来判断当前的模块是否是__main__模块。 例如,下面的代码:

代码语言:javascript
复制
if __name__ == '__main__':
    print("这是一个直接运行的模块")

当我们运行这条代码所写在的文件的时候:__name__就会直接被设置成__main__ 当我们运行别的文件的时候,__name__是不会被设置成__main__的

利用这个特性,我们就可以在这个条件判断语句内写入测试语句,从而达到: 在运行模块的时候,能够进入测试语句, 但是在别的文件中导入模块,运行别的文件的时候,测试语句就不会被运行

例如: 在测试文件test1

(注意右上角:运行的是当前文件) 输出:

在其他文件中:

在这里插入图片描述
在这里插入图片描述

输出:

这时候就不会再输出测试语句了

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一,模块的介绍
  • 二,模块的导入和使用
    • 1,直接导入模块(得到模块)
      • (1)导入
      • (2)使用
    • 2,从模块中导入功能(得到功能)
      • (1)导入
      • (2)使用
    • 3,设置别名
    • 三,自定义模块
      • 1,如何自定义模块
        • 2,同名功能的选择
          • 3,* 和__all__
            • 4,模块中的测试代码
            相关产品与服务
            腾讯云服务器利旧
            云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档