🍁作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道TOP1🏅 阿里云ACE认证高级工程师🏅
✒️个人主页:小鹏linux
💊个人社区:小鹏linux(个人社区)欢迎您的加入!
目录
2.3也可使用 from xxx import xxx 实现不同需求的导入
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()
👑👑👑结束语👑👑👑