模块
模块的定义
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
模块让你能够有逻辑地组织你的 Python 代码段。
把相关的代码分配到一个模块里能让你的代码更好用,更易懂。
模块能定义函数,类和变量,模块里也能包含可执行的代码。
包括:内置模块,自定义模块,第三方模块;
#列举一些模块
import getpass
# getpass.getpass() #输入密码时时掩饰的密码
import time #导入时间模块
# time.sleep(2)
# time.time()
# time.ctime()
import math #导入数学模块
# math.pow(2,3)
import os
# print(os.listdir('/var/log/')) #列出/var/log/
import random #产生随即数的
import string
random.random()
random.randint(1,4)
random.choice('hello') # 从序列中拿出一个值出来
random.sample(string.ascii_letters + string.digits, 4) # 从序列中拿出指定个值出来
random.shuffle(list(range(1,10))) # 打乱顺序
模块的作用
最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。
当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,
包括Python内置的模块和来自第三方的模块。使用模块还可以避免函数名和变量名冲突。
相同名字的函数和变量完全可以分别存在不同的模块中,
因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。
但是也要注意,尽量不要与内置函数名字冲突。
模块的导入
import
- import导入模块执行的操作:
- 产生一个新的名称空间;
- 在新建的名称空间俩面执行模块(.py)的内容
- 拿到了一个模块名, 执行模块文件产生的名称空间.
import …. as …
对于导入的模块重命名
from …. import ….
from …. import ….. as ….
从模块里面导入函数, 变量, 装饰器等…..
问题
问题描述:导入模块时, 模块里面执行代码结果也会显示
解决方法:
_ name_, 所在文件没有当作模块导入是, 结果为_ main_;
_ name_, 所在文件被当作模块导入是, 结果为模块的名称;
#在模块中判断模块是否被导入, 如果没有被导入, 则执行下面的代码.
if __name__ == "__main__":
#就是把模块打印的值写到这里面
print("这是写好的模块里面的显示.......")zai
print(timeit(hello))
print(__name__)
_ _all _ _决定用来控制from xxx import *导入的内容
_ all _ []列表里的是可以被导入的函数或者变量
模块的分类
- 内置模块(random, string…..)
- 自定义模块(自己写的模块)
- 第三方模块(别人写好的模块)
如何安装第三方模块
- pip3 install 模块名
- 通过pycharm安装模块
模块的默认搜索路径
模块的查找顺序: 默认情况下,Python 解释器会搜索当前目录、所有已安装的内置模
块和第三方模块,搜索路径存放在 sys 模块的 path 变量中;内存中已经加载的模块 –> 内置模块 > sys.path目录里面的模块内存中已经加载的模块 :
sys.modules查看, python解释器启动式默认会加载的模块内容.
注意:
自定义,模块千万不要跟内置模块冲突.
包
如果不同的人编写的模块名相同怎么办?为了避免模块名冲
突,Python 又引入了按目录来组织模块的方法,称为包(Package)
包的创建过程
- 创建一目录为包名;
- 在该文件夹下创建_ _ init _ _.py文件存放包的信息,该文件
可以为空;导入包时会默认执行_ _ init _ _.py - 根据需要存放脚本文件,已编译的扩展及子包;
- 可以用import,import as,from import等语句导入模块
和包;
几个有趣的包与模块的应用
itchat实现聊天机器人(指定好友或群)
import requests
import itchat
def get_tuling_response(_info):
print(_info)
api_url = "http://www.tuling123.com/openapi/api" #图灵机器人的网址
data = {
'key': '9b17a359ad484b5091f047df01f1e2b7', #图灵机器人的ip
'info': _info,
'userid':'wechat-robot'
}
# 发送数据到指定网址,获取网址返回的数据(字典数据类型)
res = requests.post(api_url, data).json()
print(res['text'])
return res['text'] # 给用户返回的内容
def OnlyUser(userstr): ##获取允许好友或群的UserName
res1=itchat.search_friends(userstr)
Onlyinfo=res1[0]['UserName']
return Onlyinfo
@itchat.msg_register(itchat.content.TEXT,isFriendChat=True,isGroupChat=True)
def text_reply(msg):
print(msg)
if msg['FromUserName'] in Onlyname:
content=msg['Content'] # 获取好友发送消息的内容
returnContent=get_tuling_response(content) # 将好友的消息发送给机器人处理, 处理结果就是返回给好友的消息
return "[I am robot]" + returnContent #返回给好友消息
if __name__=='__main__':
itchat.auto_login(hotReload=True)
Onlyname = OnlyUser(input("输入指定的好友或群名称:"))
itchat.run()
qrcode生成二维码
import qrcode
# 复杂的生成二维码
def make_code(text):
# version是二维码的尺寸,数字大小决定二维码的密度 error_correction:是指误差
# box_size:参数用来控制二维码的每个单元(box)格有多少像素点
# border: 参数用控制每条边有多少个单元格(默认值是4,这是规格的最小值
qr = qrcode.QRCode(version=5,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=8,
border=4,
)
# 添加数据
qr.add_data(text)
# 生成二维码
qr.make(fit=True)
img = qr.make_image()
img.show()
# 简单的生成二维码
def make_code_easy(text):
image = qrcode.make(text)
image.save("hello.png")
image.show()
print("image already save: hello.png")
if __name__ == '__main__':
text = input("请输入你想说的话:")
make_code_easy(text)
os模块
在Linux里面执行shell命令
- 第一种方式: 可以判断命令是否执行成功; 返回值为0, 执行成功, 返回值不为0, 执行失败
res = os.system(‘hostnam1e’)
- 第二种方式: 用来保存命令的执行结果
res = os.popen(‘hostname’).read()
- 第二种方式: 用来保存命令的执行结果
import itchat
import os
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
if msg['ToUserName']=='filehelper':
command=msg["Content"] # 获取要执行命令的内容
if os.system(command)==0: # 让电脑执行命令代码 # 如果执行成功, 返回值为0
res=os.popen(command).read()
result="执行命令成功,执行结果:\n"+res
itchat.send(result,'filehelper')
else:
result = "命令%s执行失败,请重试" %(command)
itchat.send(result,'filehelper') #给文件助手发result
if __name__=='__main__':
itchat.auto_login(hotReload=True)
itchat.run()
itchat的一些基本应用
- 给手机助手发消息
import itchat
import time
import random
itchat.auto_login(hotReload=True) #扫码登陆
while 1:
itchat.send("hello",toUserName="filehelper")
time.sleep(random.randint(1,3))
- 统计好友的男女比例
import itchat
itchat.auto_login(hotReload=True)
friends=itchat.get_friends()
info={}
for friend in friends[1:]:
if friend["Sex"]==1:
info['male']=info.get('male',0)+1
elif friend["Sex"]==2:
info['female']=info.get('female',0)+1
else:
info['other']= info.get('other',0)+1
print(info)
- 指定好友发消息
import itchat
import time
import random
import string
itchat.auto_login(hotReload=True)
res=itchat.search_friends('陌上花开') # 根据好友的昵称查找好友的信息, 返回值为列表, 有多个元素;
print(res)
moshanghuaInfo=res[0]['UserName'] # 通过索引获取该好友的详细信息(字典数据类型)
while 1:
s=random.sample(string.ascii_letters+string.digits,10)
print(s)
print(''.join(s))
itchat.send(''.join(s),toUserName=moshanghuaInfo)
time.sleep(random.randint(1,5))