一、模块
在 Python 中,一个.py文件就称之为一个模块(Module)。
•大大提高了代码的可维护性;
•编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用;
1.内置模块
import time
import functools
import random
import os
2.自定义模块
自定义模块存储位置:
['/root/PycharmProjects/day06',
'/root/PycharmProjects',
'/usr/local/python3/lib/python36.zip',
'/usr/local/python3/lib/python3.6',
'/usr/local/python3/lib/python3./lib-dynload',
'/usr/local/python3/lib/python3.6/site-packages']
定义example模块:
a = 1
b = 2
HAEDER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[36m'
END = '\033[31m'
def add(x, y):
return x + y
if __name__ == "__main__": # 判断的是这个脚本内容是否为被导入的模块内容
print(WARNING+ '这是example模块的显示' + END)
print("这是example模块__name__:", __name__)
3.python模块的默认搜索路径
import sys
print(sys.path)
['/root/PycharmProjects/day06',
'/root/PycharmProjects',
'/usr/local/python3/lib/python36.zip',
'/usr/local/python3/lib/python3.6',
'/usr/local/python3/lib/python3./lib-dynload',
'/usr/local/python3/lib/python3.6/site-packages']
追加模块的默认搜索路径;
sys.path.append('/mnt')
print(sys.path)
['/root/PycharmProjects/day06',
'/root/PycharmProjects',
'/usr/local/python3/lib/python36.zip',
'/usr/local/python3/lib/python3.6',
'/usr/local/python3/lib/python3./lib-dynload',
'/usr/local/python3/lib/python3.6/site-packages','
/mnt']
将新的搜索路径加到最前面
sys.path.insert(0, '/tmp')
print(sys.path)
['/tmp',
'/root/PycharmProjects/day06',
'/root/PycharmProjects',
'/usr/local/python3/lib/python36.zip',
'/usr/local/python3/lib/python3.6',
'/usr/local/python3/lib/python3./lib-dynload',
'/usr/local/python3/lib/python3.6/site-packages']
二、包
为了避免模块名冲突,Python 又引入了按目录来组织模块的方法,称为包(Package)
1.创建包
步骤:
创建一目录为包名;在该文件夹下会自动创建_init_.py文件存放包的信息,该文件可以为空;
Alt + Insert —>建立目录day07 —>Alt + Insert —> 建立包Python Package (在day07目录下,会自动生成_init_.py文件)—> Mark Directory as sources root(day07目录作为根目录)
根据需要在该目录下建立脚本文件,和存储已编译的扩展及子包; (建立hello.py脚本文件)
可以用import,import as,from import等语句导入模块和包;
hello.py
a = 1
b = 2
def add(x,y):
return x+y
def mypower(x,y=2):
return x**y
if __name__ == '__main__': ##检测包(即模块)是否导入成功,并且不执行add,mypower
print(add(1,3))
print(mypower(2,3))
**01_包的操作.py (调用包)**
import pack01.hello
print(pack01.hello.add(1,2))
/usr/local/python3/bin/python3.6 /root/PycharmProjects/day07/01_包的操作.py
3
**01_包的操作.py (调用包)**
from pack01.hello import add
print(add(1,4))
/usr/local/python3/bin/python3.6 /root/PycharmProjects/day07/01_包的操作.py
5
**01_包的操作.py (调用包)**
from pack01 import *
print(hello.add(1,3))
/usr/local/python3/bin/python3.6 /root/PycharmProjects/day07/01_包的操作.py
4
**##仅python2可用**
from hello import a
from hello import add
**__init__.py** **##存放包的信息**
**## python2 和 python3 都可用**
from .hello import a
from .hello import add
**01_包的操作.py**
import pack01
print(pack01.hello.a)
print(pack01.hello.add(1,2))
print(pack01.a)
print(pack01.add(1,2))
/usr/local/python3/bin/python3.6 /root/PycharmProjects/day07/01_包的操作.py
1
3
1
3
**logout.py**
def logout():
return 'user logout'
**login.py**
def login():
return 'mychat login'
**__init__.py**
from pack01.mychat.login import login
from pack01.usermanage.logout import logout
**01_包的操作.py**
from pack01 import login, logout
print(login())
print(logout())
/usr/local/python3/bin/python3.6 /root/PycharmProjects/day07/01_包的操作.py
mychat login
user logout
**01_包的操作.py**
from pack01.mychat.login import login
print(login())
/usr/local/python3/bin/python3.6 /root/PycharmProjects/day07/01_包的操作.py
mychat login
三、作用域
在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用。在 Python 中,是通过 _ 前缀来实现。比如_author_ , _name_就是特殊变量的,_func_,__fun为私有函数,不能直接引用。
四、安装第三方模块
1.安装itchat
- 需要联网 ;
- 通过 setuptools 这个工具完成;
- 编译python3
./configure --prefix=/usr/local/python3 --with-ssl
- 重新安装 python3
-make && make install - pip install 包名 或 pycharm中安装;
./pip3 install itchat
2.模块搜索路径
默认情况下,Python 解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在 sys 模块的 path 变量中;
3.调用模块
import itchat
import time
登陆
itchat.auto_login(hotReload=True)
/usr/local/python3/bin/python3.6 /root/PycharmProjects/day06/01_itchat.py
Getting uuid of QR code.
Downloading QR code.
Please scan the QR code to log in.
(eog:19388): dconf-WARNING **: failed to commit changes to dconf: The connection is closed
(eog:19388): dconf-WARNING **: failed to commit changes to dconf: The connection is closed
Please press confirm on your phone.
Loading the contact, this may take a little while.
Login successfully as 轻轻
获取好友
info = itchat.get_friends()
print("%s的好友人数为:%d" %(info[0]['NickName'],len(info)-1))
/usr/local/python3/bin/python3.6 /root/PycharmProjects/day06/01_itchat.py
轻轻的好友人数为:203
male = female = other = 0
for friend in info[1:]:
sex = friend['Sex']
if sex == 1:
male +=1
elif sex == 2:
female +=1
else:
other +=1
def my_name(args):
pass
print("%s的男性好友为:%s" %(my_name, male))
print("%s的女性好友为:%s" %(my_name, female))
print("%s的其他好友为:%s" %(my_name, other))
<function my_name at 0x7f64c29c5ae8>的男性好友为:137
<function my_name at 0x7f64c29c5ae8>的女性好友为:55
<function my_name at 0x7f64c29c5ae8>的其他好友为:11
给指定好友发送消息
import itchat
import time
itchat.auto_login(hotReload=True)
name = itchat.search_friends('王震')[0]['UserName']
print(name)
while True:
time.sleep(10)
itchat.send("%s,老司机开车了,赶紧上车" %('王震'), toUserName=name)
print("正在发送.....")
if __name__ == "__main__": ###
main()
/usr/local/python3/bin/python3.6 /root/PycharmProjects/day06/01_itchat.py
@72d2b02f5e897823542a36f7d517db0a
正在发送.....
正在发送.....
正在发送.....
LOG OUT!
简单的聊天机器人
import itchat
@itchat.msg_register(itchat.content.TEXT) ##文本信息
def hello(msg):
print(msg) ###msg:是一个字典,Text存储发送的信息
text = msg['Text']
fromUser = msg['FromUserName']
if 'age' in text:
return '18'
elif 'name' in text:
return "小波"
else:
res = ''
itchat.send(res, toUserName=fromUser)
itchat.auto_login(hotReload=True)
itchat.run()
@itchat.msg_register([itchat.content.PICTURE,itchat.content.VIDEO]) ##图片和视频
def file_download(msg):
print(msg) ##字典:FileName
filename = msg['FileName']
content = msg.download(filename)
with open(filename,'wb') as f:
f.write(content)
待完善聊天机器人