Python自定义模块 - vip共享吧
  • 网站首页
  • IT技术笔记
    • Java教程
    • MySql数据库
    • PHP开发
    • Python教程
    • JavaScript
    • SEO优化
    • 常用工具
  • 好资源福利
    • 会员账号共享
  • 网站模板源码
    • 小程序源码
    • 网站源码
  • 共享网络资源
  • 更多功能
    • 留言吐槽
    • 文章归档
    • 我的邻居
    • 史上今日
    • 视频解析
    • 高清壁纸
    • 公告动态
    • 广告合作
    • 关于我们


导航菜单
  • 网站首页
  • IT技术笔记
    • Java教程
    • MySql数据库
    • PHP开发
    • Python教程
    • JavaScript
    • SEO优化
    • 常用工具
  • 好资源福利
    • 会员账号共享
  • 网站模板源码
    • 小程序源码
    • 网站源码
  • 共享网络资源
  • 更多功能
    • 留言吐槽
    • 文章归档
    • 我的邻居
    • 史上今日
    • 视频解析
    • 高清壁纸
    • 公告动态
    • 广告合作
    • 关于我们
Python

Python自定义模块

2024/9/5 韩俊  Python教程 669 0

在项目开发过程中,我们经常把项目中常用的功能或算法写成一个可供其它文件调用的函数或类,我们把这些函数和类放在一个文件中,这个文件就叫做模块,因为这个模块是我们自己写的,所以叫自定义模块。

模块很好的解决了软件工程中的低耦合,高内聚的要求,我们在项目开发中,把经常被使用的函数和类封装成模块是个很好的编程习惯。

如何自己定义模块

我们自己写个函数放在一个后缀名为 py 的文件里,如果我们在其它文件中使用该文件,这个文件相对使用它的文件就叫自定义模块。 自定义模块的引用方式是用 import... ,或者 from...import... ,但要注意自定义的模块和引用文件要放在一个目录下。下面我们实现一个定义模块,模块文件名为 mabs.py,我们通常叫模块名为 myabs(不带后缀名),在该模块内,我们实现一个函数 myabsfunc,该函数返回数字的绝对值,我们在 hello.py 文件中引用该自定义模块。

'''
myabs.py 文件(该文件为自定义模块 myabs) 。
该模块有一个函数 myabsfunc。
'''
def myabsfunc(data):
    try:
        data = int(data)
    except:
        raise TypeError("必须为数字类型")
    return data if data >= 0 else -data
'''
hello.py 文件。
该文件引用自定义模块 myabs。
'''
import myabs  # 导入自定义模块

print(myabs.myabsfunc(-250))

当然我们也可以直接导入这个模块内的函数。

'''
hello.py 文件。
该文件引用自定义模块 myabs。
'''
from myabs import myabsfunc  # 从自定义模块 myabs 里导入函数

print(myabsfunc(-250))

我们可以给 import... 后面的名字起个别名。

'''
hello.py 文件。
该文件引用自定义模块 myabs。
'''
from myabs import myabsfunc as absfunc # 给函数起个别名

print(absfunc(-250))

################################ 我是分割线 ################################

'''
hello.py 文件。
该文件引用自定义模块 myabs。
'''
import myabs as absmodule # 给函数起个别名

print(absmodule.myabsfunc(-250))

包

在开发项目中,我们可能要写很多模块,为了方便与组织,我们可以把这些模块放入一个目录中,Python 对按目录来组织模块的方法,称为包(Package),包是模块的集合,比模块又高一级的封装。 没有比包更高级别的封装,但是包可以嵌套包,就像文件目录一样。导入包的方式和导入模块一样,但要注意,包里面必须要有一个 __init__.py 文件,否则会报错。比如在项目 python_one 中,我们创建一个 mytools 包,把 myabs 模块放入该包中,在 hello.py 中使用该包中的 myabsfunc 函数。

如果我们的包中有多个(比如几十个)模块,对每个模块都需要使用 from...import... 的方式导入,那就很 low 了。Python 支持用 from...import * 的方式可以导入 __init__.py 的文件里的 __all__ 变量里面限定的模块。假如我们的 mytools 包里面有两个模块 myabs 和 myhaha,我们可以在 __init__.py 里面限定要导入的模块。

'''
__init__.py 文件。
变量 __all__ 的值是对使用 from...import * 语法导入模块的限定。
'''
__all__ = ["myhaha"]  # 如果使用 from...import * 语法,则只导入了 myhaha 模块。
'''
myabs.py 文件(该文件为自定义模块 myabs) 。
该模块有一个函数 myabsfunc。
'''
def myabsfunc(data):
    try:
        data = int(data)
    except:
        raise TypeError("必须为数字类型")
    return data if data >= 0 else -data
'''
myhaha.py 文件(该文件为自定义模块 myhaha) 。
该模块有一个函数 myhahafunc。
'''
def myhahafunc():
    return "haha"
'''
hello.py 文件。
该文件使用 mytools 包。
'''
from mytools import *        # 只导入了 __init__.py 文件里的 __all__ 变量里面的模块。

print(myhaha.myhahafunc())    # 正确
print(myabs.myabsfunc(-250))  # 错误

当然如果不使用 from...import * 的方式导入模块,则不受 __init__.py 文件里的 __all__ 变量的限制。 比如我们在 __init__.py 文件里写入 __all__ = ["myhaha"],我们可以直接导入 myabs 模块。

'''
hello.py 文件。
该文件使用 mytools 包。
'''
from mytools import myabs

print(myabs.myabsfunc(-250))  # 正确,不受 __all__ 变量的限制

无论是导入包还是模块还是模块里的函数,变量,或类等等,import 后面的内容必须是一级单位。

'''
hello.py 文件。
该文件使用 mytools 包。
'''
import mytools                       # 正确,导入 mytools 包
from mytools import myabs            # 正确,导入 mytools 包里的 myabs 模块
from mytools.myabs import myabsfunc  # 正确,导入 mytools 包里的 myabs 模块里的 myabsfunc 函数
import mytools.myabs                 # 错误,import 后面必须是一级单位
from mytools import myabs.myabsfunc  # 错误,import 后面必须是一级单位

本节重要知识点

会写模块并导入模块。

会写包并导入包。

点赞:0 分享

上一篇
python搜索模块的路径
下一篇
什么是计算机体系结构中的受保护执行?
作者头像 作者名称 作者性别
韩俊

热门推荐

1 Python3的变量和常量
2 python中collections库详解
3 Python3继承和多态的理解
4 Python3生成器
5 Python3初级运算符
6 Python3迭代

评论列表

取消回复

    •  
      Login

      韩俊

      趁你现在还有时间,尽你自己最大的努力,努力做成你最想做的那件事,成为你最想成为的那种人,过着你最想过的那种生活。这个世界永远比你想的要更精彩,不要败给生活。

      退出登陆
      • 10076文章
      • 455评论
      • 80微语
  • 广告赞助

  • 二零二五年07月
    一二三四五六日
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
  • 分类

    • 网站模板源码
    • IT技术笔记
    • 好资源分享
    • 共享网络资源
  • 最新文章

      • 分享各大最新影视资源采集站网址合集资源共享
        • 经典的黄句子
          • 迷雾通:免费使用的VPN软件
            • 宝塔如何配置SSH密钥,并使用WinSCP工具远程连接服务器
              • 女人高情商祝福语简短
                • 京东外卖商户入驻指南及详细入驻攻略
                  • git教程及git常用命令指南
                    • 七一活动经典句子
  • 热门文章

    • 酷狗音乐VIP账号 酷狗音乐会员账号共享2017.01.29更新
    • 芒果tv vip会员账号 芒果tv会员账号共享2017.01.29更新
    • 爱奇艺vip账号 爱奇艺/PPS会员账号共享2016.12.12更新
    • 优酷/土豆vip会员账号 优酷会员账号共享2017.01.29更新
    • 活动:免费获得爱奇艺VIP/PPS会员账号50天以上的使用权!
    • 酷我音乐VIP账号 酷我音乐会员账号共享2016.12.31更新
    • 暴风影音会员账号 暴风影音会员账号共享2016.12.31更新
    • m1905会员账号 m1905会员账号共享2016.10.21更新
  • 最新评论

    • https://www.vipshare8.com/content/templates/meta/Static/images/tx/10.jpg

      你丫的 文章写得太好了 支持下!![F3...

    • https://www.vipshare8.com/content/templates/meta/Static/images/avatar.jpg

      很棒!刚在某网站看到这个,很欣赏,可惜下...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=3861064027

      呃呃呃 oooo

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      回复了111:根据激活的时间有一年的有效期!

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=792480561

      到2025就到期了吗?

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      [blockquote]打卡时间:16:...

    • https://www.vipshare8.com/content/templates/meta/Static/images/tx/7.jpg

      俊哥,想借用迅雷一用!但需要手机验证!看...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=3293901900

      感谢大大的分享

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      回复了好奥v:如果没有解析成功,可以切换接口...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=131241242441

      现在视频解析网站怎么用不了啦?

  • 网站统计 I 当前在线:386人

    • 本站管理:1位
    • 用户总数:593位
    • 置顶文章:2篇
    • 日志总数:10076篇
    • 微语总数:80条
    • 评论总数:455条
    • 标签总数:83条
    • 页面总数:8页
    • 分类总数:14个
    • 链接总数:16条
    • 运行天数:3716天
    • 最后更新:7月1日
    • 登录
    • 注册
    • 找回
    Copyright © 2025vip共享吧网站地图 网站备案豫ICP备19004194号-1

    免责声明:本站资源仅供用于学习和交流,本站部分素材内容来源于网络,如有侵权/投稿等,请及时联系站长.

    • 首页
    • 秒懂百科 秒懂百科
    • 搜索
    • 史上今日

    大家都在搜

    • 飞卢小说vip账号共享
    • Python
    • 千图网vip账号共享
    • 爱奇艺VIP账号共享
    • chatGPT
    • 威客平台
    • 芒果tv会员
    • 优酷vip账号共享
    • 最新电影
    • 设计素材
    • 乐视视频
    • 暴风影音会员账号
    • 腾讯VIP账号共享
    • MySql
    • 微信小程序源码
    • PHP教程
    • 
    • 