【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

目录
相关文章
|
1月前
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
50 4
|
12天前
|
Python
Python Internet 模块
Python Internet 模块。
108 74
|
1月前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
109 63
|
1月前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
1月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
24天前
|
Python 容器
[oeasy]python048_用变量赋值_连等赋值_解包赋值_unpack_assignment _
本文介绍了Python中变量赋值的不同方式,包括使用字面量和另一个变量进行赋值。通过`id()`函数展示了变量在内存中的唯一地址,并探讨了变量、模块、函数及类类型的地址特性。文章还讲解了连等赋值和解包赋值的概念,以及如何查看已声明的变量。最后总结了所有对象(如变量、模块、函数、类)都有其类型且在内存中有唯一的引用地址,构成了Python系统的基石。
28 5
|
1月前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
Python
项目依赖的python包requirements.txt文件的生成与安装
项目依赖的python包requirements.txt文件的生成与安装
476 0
|
7月前
|
Python Windows
Python分发包安装pip3
Python分发包安装pip3
42 0
python 获取当前项目引用的第三包(不是当前环境里面安装的所有安装包)
python 获取当前项目引用的第三包(不是当前环境里面安装的所有安装包)