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

123 阅读2分钟

​ 携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第28天,点击查看活动详情

🍁作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道TOP1🏅 阿里云ACE认证高级工程师🏅
✒️个人主页:小鹏linux
💊个人社区:小鹏linux(个人社区)欢迎您的加入!

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/

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

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

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

[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()
接收到一条短信.....

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()
正在发送短信...
已经成功发送...

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

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

2.2导入子包和使用模块

Phone 是最顶层的包,Voicedta 等是它的子包。 我们可以这样导入子包:
import Phone.Mobile.Analog 
Phone.Mobile.Analog.dial()

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

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

Mobile.Analog.dial('555-1212')

此外,我们可以还引用更多的子包:
from Phone.Mobile import Analog
Analog.dial('555-1212')

事实上,你可以一直沿子包的树状结构导入:
from Phone.Mobile.Analog import dial

dial('555-1212')

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

**2.4包同样支持 from xxx import ***

包同样支持 from-import all 语句:
from package.module import *

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

3.模块知识扩展

常用模块简介

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

3.1常用标准库

标准库说明
builtins内建函数默认加载
os操作系统接口
syspython自身的运行环境
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))

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'

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()

 👑👑👑结束语👑👑👑