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

📝前言:
这篇文章主要讲解一下python基础中的关于模块的导入:
1,模块的介绍
2,模块的导入方式
3,自定义模块

🎬个人简介:努力学习ing
📋个人专栏:C语言入门基础以及python入门基础
🎀CSDN主页 愚润求学
🌄每日鸡汤:路漫漫其修远兮,吾将上下而求索

文章目录

  • 一,模块的介绍
  • 二,模块的导入和使用
    • 1,直接导入模块(得到模块)
      • (1)导入
      • (2)使用
    • 2,从模块中导入功能(得到功能)
      • (1)导入
      • (2)使用
    • 3,设置别名
  • 三,自定义模块
    • 1,如何自定义模块
    • 2,同名功能的选择
    • 3,* 和__all__
    • 4,模块中的测试代码

一,模块的介绍

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

二,模块的导入和使用

模块的导入一般写在文件的开头(这一点和C语言中,要包含对应的头文件类似,要写在开头)
导入方式汇总:
在这里插入图片描述
下面我们介绍几种基本的导入方式:

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

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

(1)导入

语法:

import 模块名
# 或者一次性导入多个:
import 模块名, 模块名

示例,导入time模块

import time  # 导入time模块

(2)使用

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

模块名.功能

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

import time  # 导入time模块
time.sleep(10)  # 通过 . 操作符使用功能

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

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

(1)导入

语法:

from time import sleep # 导入time模块的sleep功能

示例:

from time import sleep # 导入time模块的sleep功能

(2)使用

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

from time import sleep  # 导入time模块的sleep功能
sleep(10)  # 直接使用功能

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

3,设置别名

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

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

三,自定义模块

1,如何自定义模块

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

import test  # 导入我们的自定义模块
test.ptint1()  # 使用里面的功能

输出:
在这里插入图片描述

2,同名功能的选择

注意:当导入多个不同的模块,但模块内有同名功能,当调用这个同名功能时,调用的是后面导入的模块的功能
如:
我们在test1test2模块里面写入同名功能:
在这里插入图片描述
在这里插入图片描述
运行下面代码:

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,模块中的测试代码

假如我们在文件里面写好功能以后,想测试一下这些功能,如:
在这里插入图片描述
输出结果是正常的,并且我们不打算删除这些测试代码。
但是,当我们在别的文件里面,对刚刚的模块进行导包:

from test1 import my_print1
my_print1()

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

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

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

if __name__ == '__main__':print("这是一个直接运行的模块")

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

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

例如:
在测试文件test1
在这里插入图片描述
(注意右上角:运行的是当前文件)
输出:
在这里插入图片描述
在其他文件中:
在这里插入图片描述
输出:
在这里插入图片描述
这时候就不会再输出测试语句了


🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Transformer的代码实现 day03(Positional Encoding)

Positional Encoding的理论部分 注意力机制是不含有位置信息,这也就表明:“我爱你”,“你爱我”这两者没有区别,而在现实世界中,这两者有区别。所以位置编码是在进行注意力计算之前,给输入加上一个位置信息…

Leetcode 234. 回文链表

给你一个单链表的头节点 head ,请你判断该链表是否为 回文链表 。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true 示例 2: 输入:he…

Maven依赖管理项目构建工具

一、Maven简介 1、为什么学习Maven 1.1、Maven是一个依赖管理工具 ①jar 包的规模 随着我们使用越来越多的框架,或者框架封装程度越来越高,项目中使用的jar包也越来越多。项目中,一个模块里面用到上百个jar包是非常正常的。 比如下面的例…

jvm总结学习

四种加载器 1.启动类加载器 2.拓展类加载器 3.应用程序加载器 4.自定义加载器 沙箱机制 就是为了保证安全,增加的一些权限。 native方法区(静态变量,常量,类信息(构造方法,接口定义)&…

基于深度学习的钢材表面缺陷检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要:本文深入研究了基于YOLOv8/v7/v6/v5的钢材表面缺陷检测系统,核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法,进行性能指标对比;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码,及基于Strea…

算法基础--递推

😀前言 递推算法在计算机科学中扮演着重要的角色。通过递推,我们可以根据已知的初始条件,通过一定的规则推导出后续的结果,从而解决各种实际问题。本文将介绍递推算法的基础知识,并通过一些入门例题来帮助读者更好地理…

代码随想录第29天|491.递增子序列 46.全排列 47.全排列 II

目录: 491.递增子序列 46.全排列 47.全排列 II 491.递增子序列 491. 非递减子序列 - 力扣(LeetCode) 代码随想录 (programmercarl.com) 回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bili…

PS从入门到精通视频各类教程整理全集,包含素材、作业等(7)复发

PS从入门到精通视频各类教程整理全集,包含素材、作业等 最新PS以及插件合集,可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制,今天先分享到这里,后续持续更新 PS敬伟01——90集等文件 https://www.alipan.com/s…

盲盒一番赏小程序搭建:打造神秘与惊喜的赏玩新体验

随着移动互联网的快速发展,小程序因其便捷、轻量级的特点,逐渐成为了连接商家与消费者的新桥梁。盲盒一番赏小程序的搭建,旨在为用户带来一种全新的赏玩体验,满足他们对神秘与惊喜的追求。 盲盒一番赏小程序将传统的盲盒概念与一…

【智能算法】猎豹优化器(CO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2022年,MA Akbari等人受到自然界中猎豹捕猎行为启发,提出了猎豹优化器(The Cheetah Optimizer,CO)。 2.算法原理 2.1算法思想 CO法对猎…

P1102 A-B 数对 (非二分,不开龙永远的痛,用map解决)

可是我真的会伤心 题目链接 思路:1.本来想的是暴力,两层循环模拟每个数。 2.后来想先把每个数字的个数求出来放在数组nums【】中,并把不重复的数字存到数组b,再两层循环b数组应该时间复杂度会好些,如果b数组中的两个数…

欧拉路径欧拉回路

欧拉回路,指遍历图时通过图中每条边且仅通过一次,最终回到起点的一条闭合回路,适用于有向图与无向图,如果不强制要求回到起点,则被称为欧拉路径。 欧拉图:具备欧拉回路的图 无向图:图的所有顶…