携手创作,共同成长!这是我参与「掘金日新计划 · 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]
def recvmsg():
print("接收到一条短信.....")
![点击并拖拽以移动]()
[root@localhost msg]# tree
.
├── recvmsg.py
└── sendmsg.py
0 directories, 2 files
![点击并拖拽以移动]()
[root@localhost msg]
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]
__all__=['sendmsg','recvmsg']
[root@localhost ~]
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 | 操作系统接口 |
| 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(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()
![点击并拖拽以移动]()
👑👑👑结束语👑👑👑
