【python | linux12】模块制作及嵌套的包

简介: 在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。比如有这样一个文件test.py,在test.py中定义了函数add。

🍁作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道TOP1🏅 阿里云ACE认证高级工程师🏅

✒️个人主页:小鹏linux

💊个人社区:小鹏linux(个人社区)欢迎您的加入!

目录

1.模块制作

1.1定义自己的模块

1.2Python中的包

2.嵌套的包

2.1 目录结构

2.2导入子包和使用模块

2.3也可使用 from xxx import xxx 实现不同需求的导入

2.4包同样支持 from xxx import *

3.模块知识扩展

3.1常用标准库

3.2应用案例,注册和登录

👑👑👑结束语👑👑👑


1.模块制作

1.1定义自己的模块

在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。比如有这样一个文件test.py,在test.py中定义了函数add。

调用自己的模块

参考上一篇文章

使用__name__测试模块

参考上一篇文章

1.2Python中的包

Python中的包

包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py 文件,那么这个文件夹就称之为包。

__all__在包中的作用:

在__init__.py文件中,定义一个__all__变量,它控制着 from 包名 import *时导入的模块

可以在__init__.py文件中编写内容

[root@localhost ~]#  mkdir msg
[root@localhost ~]# cd msg/

image.gif

[root@localhost msg]# vim sendmsg.py
def sendmsg():
        print("正在发送短信...")
        print("已经成功发送...")

image.gif

[root@localhost msg]# vim recvmsg.py
def recvmsg():
        print("接收到一条短信.....")

image.gif

[root@localhost msg]# tree
.
├── recvmsg.py
└── sendmsg.py
0 directories, 2 files

image.gif

[root@localhost msg]# ipython
In [1]: import msg.sendmsg
In [2]: msg.sendmsg.sendmsg()
正在发送短信...
已经成功发送...
In [3]: import msg.recvmsg
In [4]: msg.recvmsg.recvmsg()
接收到一条短信.....
In [5]: import msg.recvmsg as re
In [6]: re.recvmsg()
接收到一条短信.....

image.gif

In [1]: from msg import sendmsg,recvmsg
In [2]: sendmsg.sendmsg()
正在发送短信...
已经成功发送...
In [3]: from msg.sendmsg import sendmsg
In [4]: sendmsg()
正在发送短信...
已经成功发送...
In [5]: from msg import *
In [6]: sendmsg.sendmsg()
正在发送短信...
已经成功发送...

image.gif

[root@localhost msg]# vim __init__.py
__all__=['sendmsg','recvmsg']
[root@localhost ~]# ipython
In [1]: from msg import *
In [2]: sendmsg.sendmsg()
正在发送短信...
已经成功发送...

image.gif

2.嵌套的包

2.1 目录结构

假定我们的包的例子有如下的目录结构:

Phone/
    __init__.py
    common_util.py
    Voicedta/
        __init__.py
        Pots.py
        Isdn.py
    Fax/
        __init__.py
        G3.py
    Mobile/
        __init__.py
        Analog.py
        igital.py
    Pager/
        __init__.py
        Numeric.py

image.gif

2.2导入子包和使用模块

Phone 是最顶层的包,Voicedta 等是它的子包。 我们可以这样导入子包:

import Phone.Mobile.Analog 
Phone.Mobile.Analog.dial()

image.gif

2.3也可使用 from xxx import xxx 实现不同需求的导入

第一种方法是只导入顶层的子包,然后使用属性/点操作符向下引用子包树:

from Phone import Mobile
Mobile.Analog.dial('555-1212')

image.gif

此外,我们可以还引用更多的子包:

from Phone.Mobile import Analog
Analog.dial('555-1212')

image.gif

事实上,你可以一直沿子包的树状结构导入:

from Phone.Mobile.Analog import dial
dial('555-1212')

image.gif

在我们上边的目录结构中,我们可以发现很多的 __init__.py 文件。这些是初始化模块,from-import 语句导入子包时需要用到它。 如果没有用到,他们可以是空文件。

2.4包同样支持 from xxx import *

包同样支持 from-import all 语句:

from package.module import *

image.gif

然而,这样的语句会导入哪些文件取决于操作系统的文件系统。所以我们在__init__.py 中加入 __all__ 变量。该变量包含执行这样的语句时应该导入的模块的名字。它由一个模块名、字符串列表组成。

3.模块知识扩展

常用模块简介

Python有一套很有用的标准库。标准库会随着Python解释器,一起安装在你的电脑里。它是Python的一个组成部分。这些标准库是Python为你准备好的利器可以让编程事半功倍

3.1常用标准库

标准库

说明

builtins

内建函数默认加载

os

操作系统接口

sys

python自身的运行环境

functools

常用的工具

json

编码和解码json对象

logging

记录日志、调试

multiprocessing

多进程

threading

多进程

copy

拷贝

 

import json
'''
a = ["aa","bb","cc"]
f = open("test.txt","w")
f.write(str(a))
f.close()
'''
f = open("test.txt","r")
result = f.read()
#print(list(result))
print(type(result))

image.gif

In [4]: import sendmsg
In [5]: sendmsg.test2()
----sendmsg---test2----
In [6]: import hashlib
In [7]: m=hashlib.md5()
In [8]: s="123456"
In [9]: m.update(s.encode("utf-8"))
In [10]: m.hexdigest()
Out[10]: 'e10adc3949ba59abbe56e057f20f883e'

image.gif

3.2应用案例,注册和登录

import hashlib
class LoginSys(object):
    #加密方法
    def setMd5(self,password):
        m = hashlib.md5()
        m.update(password.encode("utf-8"))
        return m.hexdigest()
    def main(self):
        f = open("password.txt","a+")
        f.seek(0,0)
        content = f.read()
        f.close()
        if len(content) <=0:
            #注册
            print("请根据提示进行注册")
            name = input("请输入您要注册的用户名:")
            password = input("请输入您要注册的密码:")
            fw = open("password.txt","w")
            fw.write(name)
            fw.write("\n")
            #加密
            fw.write(self.setMd5(password))
            fw.close()
        else:
            #登录
            print("请根据提示进行登录!")
            name = input("请输入您的账号:")
            password = input("请输入您的密码:")
            f = open("password.txt","a+")
            f.seek(0,0)
            nameSave = f.readline()
            passwordSave = f.readline()
            password = self.setMd5(password)
            a = nameSave.split()[0]
            print("从文件中读取过来的账号是:",a)
            if name == a:
                if password == passwordSave:
                    print("欢迎%s登录本系统!"%name)
                else:
                    print("密码错误!")
            else:
                print("账号错误!")
l = LoginSys()
l.main()

image.gif

👑👑👑结束语👑👑👑

image.gif

目录
相关文章
|
28天前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
106 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
1月前
|
缓存 安全 Linux
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
112 23
|
1月前
|
人工智能 Python
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
56 7
|
1月前
|
存储 人工智能 运维
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
199 48
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
|
1月前
|
程序员 Linux Python
python中模板和包的使用
本文介绍了 Python 模块和包的基本概念及使用方法。模块是 Python 程序结构的核心,每个以 `.py` 结尾的源文件都是一个模块,包含可重用的代码。文章详细讲解了模块的导入方式(如 `import` 和 `from...import`),模块的搜索顺序,以及如何创建和发布自己的模块。此外,还介绍了包的概念,包是包含多个模块的特殊目录,并通过 `__init__.py` 文件定义对外提供的模块列表。最后,文章简述了如何使用 `pip` 工具管理第三方模块的安装与卸载。作者:大石头的笔记;来源:稀土掘金。
|
1月前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
32 3
|
2月前
|
Python
Python Internet 模块
Python Internet 模块。
133 74
|
2月前
|
Python 容器
[oeasy]python048_用变量赋值_连等赋值_解包赋值_unpack_assignment _
本文介绍了Python中变量赋值的不同方式,包括使用字面量和另一个变量进行赋值。通过`id()`函数展示了变量在内存中的唯一地址,并探讨了变量、模块、函数及类类型的地址特性。文章还讲解了连等赋值和解包赋值的概念,以及如何查看已声明的变量。最后总结了所有对象(如变量、模块、函数、类)都有其类型且在内存中有唯一的引用地址,构成了Python系统的基石。
36 5
|
3月前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
141 63
|
3月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。

热门文章

最新文章