🌍个人简介
🍁作者简介:大家好,我是姐姐划船吗?运维领域创作者,🏅阿里云ACE认证高级工程师🏅
✒️个人主页:姐姐划船吗?🔥
🕺支持我:点赞👍+收藏⭐️+留言📝
🫀格言:你未必出类拔萃,但一定与众不同!🔥
🧊系列专栏:
🎒 阶段一:windows基础
🎒 阶段二:Linux基础知识
🎒 阶段三:shell基础+shell高级
🎒 阶段四:学会python,逆天改命
🎒 阶段五: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
操作系统接口
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))
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()
👑👑👑结束语👑👑👑
实习渠道哪家强,中国北京找优加!
只要实习相关,找我们,给你一套适合你的解决方案,从简历制作、面试题库、行业资源、模拟面试到大厂资源。
版权归原作者 姐姐划船吗? 所有, 如有侵权,请联系我们删除。