Python中的模块与包

74 篇文章 0 订阅
26 篇文章 0 订阅
本文介绍了Python中的模块和包的概念,包括模块作为工具包的性质,以及如何导入和使用模块。讨论了模块导入的多种方式,如`import 模块名`,`from 模块名 import 函数名`,以及`import 长模块名 as 短模块名`等,并解答了为何需要指定模块名调用函数等问题。此外,还探讨了包的组织结构和导入方法,以及`__all__`和`__name__ == '__main__'`的作用。最后,文章给出了一个使用包的自动化发送邮件的示例,需要安装`yagmail`和`schedule`模块。
摘要由CSDN通过智能技术生成

模块
模块就是工具包,要想使用这个工具包中的工具(比如函数)就要导入这个模块
模块是非常简单的Python文件,单个Python文件就是一个模块,两个模块就是两个Python文件
模块的导入
import 模块名1,模块名2
import 模块名.函数名
from 模块名 import 函数名/变量名
import 长模块名 as 短模块名
from 模块名 as import *
问题1
为什么必须加上模块名调用呢?
import 模块名.函数名
因为可能存在这样一种情况:在多个模块含有相同名称的函数,如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。所以像上述这样引入模块的时候调用函数必须加上模块名
问题2
如果只需要用到模块中的某个函数/变量/类,如何导入呢?
from 模块名 import 函数/变量名
通过这种方式引入的时候调用函数时只能给出函数名不能给出模块名,但是当两个模块中含有相同名称的函数时后面一次引入会覆盖前面一次引入
问题3
如果导入的模块名/函数名/变量名过长,该如何操作?
import 长模块名 as 短模块名
from 模块名 import 长函数名 as 短函数名
问题4
如果要把一个模块中的所有内容全部导入该如何操作?
from 模块名 import *
这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多使用
问题5
模块中的__all__有什么作用?
如果一个文件中有all变量,那么也就意味着没有在这个变量中的元素,不会被from 模块名 import * 导入
问题4
模块中的__name__ == '__main__'有什么作用?
判断当前代码是否是被其他代码导入的,如果不是则执行里面的内容

包将有联系的模块组织在一起有效避免了模块名称冲突问题,让应用组织结构更加清晰
包的制作与导入
制作包的框架
在这里插入图片描述
在包中写入自定义内容
在这里插入图片描述
在这里插入图片描述
导入
在这里插入图片描述
使用包
在这里插入图片描述
自动化发送邮件代码
需要安装yagmil模块和schedule模块

import yagmail
def send_mail(sender='2384995509@qq.com',password=None,receivers=None,subject='自动化发送邮件',
              contents=None,attaches=None,host='smtp.qq.com'):
    """..."""
    try:
        # host 是smtp服务器,QQ邮箱:smtp.qq.com 163邮箱: smtp.163.com
        mail = yagmail.SMTP(user=sender,password=password,host=host)
        # 真正发送邮件
        mail.send(to=receivers,subject=subject,contents=contents,attachments=attaches)
    except Exception as e:
        print('发送邮件失败,失败原因是:', e)
    else:
        print('[主题:%s]邮件发送成功' %(subject))
if __name__ == '__main__':
    import schedule
    # 授权码
    password = 'rfwethjddustecbf'
    friends = ['******@qq.com']
    subject = ['邮件报警,磁盘已使用90%']
    # h1是一级标题,style='color:red'红色显示
    contents = ['邮件告警',"<hi style='color:red'>磁盘已使用90%</h1>"]
    attaches = ['bao.py']
    # 定时任务,为了测试,每隔2秒执行一次
    schedule.every(1).seconds.do(send_mail,password=password,
                                 receivers=friends,
                                 subject=subject,
                                 contents=contents,
                                 attaches=attaches)
    while True:
        schedule.run_pending()

授权码获取方法:进入邮箱,点击设置,打开服务,点击生成授权码
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值