python-模块与包

本文详细介绍了Python中的模块和包的概念,包括内置模块、自定义模块的创建和搜索路径,以及如何安装和使用第三方模块如itchat。讨论了模块的作用域规则,并展示了如何给指定好友发送消息和构建简单的聊天机器人。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、模块

在 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)

待完善聊天机器人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值