【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

目录
相关文章
|
17天前
|
存储 开发者 Python
Python中的collections模块与UserDict:用户自定义字典详解
【4月更文挑战第2天】在Python中,`collections.UserDict`是用于创建自定义字典行为的基类,它提供了一个可扩展的接口。通过继承`UserDict`,可以轻松添加或修改字典功能,如在`__init__`和`__setitem__`等方法中插入自定义逻辑。使用`UserDict`有助于保持代码可读性和可维护性,而不是直接继承内置的`dict`。例如,可以创建一个`LoggingDict`类,在设置键值对时记录操作。这样,开发者可以根据具体需求定制字典行为,同时保持对字典内部管理的抽象。
|
21天前
|
Linux Shell Python
Linux执行Python脚本
Linux执行Python脚本
26 1
|
27天前
|
Shell Linux C语言
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
29 1
|
18天前
|
存储 缓存 算法
Python中collections模块的deque双端队列:深入解析与应用
在Python的`collections`模块中,`deque`(双端队列)是一个线程安全、快速添加和删除元素的双端队列数据类型。它支持从队列的两端添加和弹出元素,提供了比列表更高的效率,特别是在处理大型数据集时。本文将详细解析`deque`的原理、使用方法以及它在各种场景中的应用。
|
27天前
|
Linux Shell 文件存储
【Shell 命令集合 系统设置 】Linux 加载和卸载内核模块 modprobe命令 使用指南
【Shell 命令集合 系统设置 】Linux 加载和卸载内核模块 modprobe命令 使用指南
36 1
|
3天前
05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域
05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域
|
4天前
|
Python
python学习14-模块与包
python学习14-模块与包
|
4天前
|
Python
python学习4-内置函数range()、循环结构、循环控制语句、else语句、嵌套循环
python学习4-内置函数range()、循环结构、循环控制语句、else语句、嵌套循环
|
5天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
6天前
|
Python
掌握Python导包技艺:揭秘导包语句的奥秘
掌握Python导包技艺:揭秘导包语句的奥秘
15 0