Python【No-10】模块

模块 Module

一个 .py文件就称之为一个模块 module

好处:

  1. 提高了代码的可维护性;
  2. 可以被其他地方应用;
  3. 可以避免命名冲突。

import

import加载的模块分为四个通用类别:

  1. 使用python编写的代码(py文件);
  2. 已被编译为共享库或DLL的C或C++扩展
  3. 包好一组模块的
  4. 使用C编写并链接到python解释器的内置模块.

包 Package

模块的上一级称为包 package

  • 包是一个文件夹,可以通过包来组织模块,避免冲突。
  • 一个包里必须含有一个__init__.py
    1. __init__.py可以是空文件,也可以有Python代码
    2. __init__.py本身就算一个模块,它的模块名就是包名
  • 包里面还可以有包
MyPackage
 ├─ web
 │  ├─ __init__.py
 │  ├─ utils.py
 │  └─ test.py
 ├─ dirc
 │  ├─ utils.py
 │  └─ test.py
 │
 ├─ __init__.py
 ├─ main.py
 └─ utils.py

顶层包为 MyPackage
子包为 web
普通目录 dirc (因为它没有__init__.py文件)
test.py的模块名为MyPackage.web.test
utils.py有两个,模块名分别为MyPackage.web.utilsMyPackage.utils

自己创建模块时注意命名不要与系统模块冲突
要检查系统中是否存在该模块,可以在交互环境下执行 import abc,若成功说明系统存在此模块。

>>> import aabbccc
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'aabbccc'

使用模块

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"Here is the module documentation"

__author__ = 'Boii'

import sys


def test():
    args = sys.argv
    if len(args) == 1:
        print('Hello, world!')
    elif len(args) == 2:
        print('Hello, %s!' % args[1])
    else:
        print('Too many arguments!')


if __name__ == '__main__':
    test()

标准模块文件模板

  • #!/usr/bin/env python3 是向Unix / Linux / Mac 系统声明本文件是Python3文件
  • # -*- coding: utf-8 -*- 表示本文件使用标准utf-8编码,虽然Python3之后默认支持中文,但为保稳妥还是写上
  • "Here is the module documentation"是模块文档注释,任何模块的第一个字符串都被视为模块的文档注释。可以通过模块名.__doc__获得。
  • __author__ = 'Boii'是作者。可以通过模块名.__author__获得。

标准模块文件模板也可以不写,并不影响。

导入、参数列表、name

  • import sys引入了内置模块sys
  • args = sys.argv,这里sys.argv是参数列表,是一个 list,保存的是通过命令执行本文件的时候所带的参数。但该 list的第一个元素永远是文件名。
    • 例如上面的文件名为Hello.py,则运行命令python Hello.py后sys,argv为['Hello.py'].
    • 如果执行的命令为python Hello.py Boii,则sys.argv为['Hello.py', 'Boii']
  • if __name__ == '__main__': test()如果这个文件是独立运行的,则 if 为 True,如果这个文件是被导入的,则 if 为 False。
$ python Hello.py
Hello, world!
$ python Hello.py Boii
Hello, Boii!

↑ 通过命令独立运行这个文件,所以 if 为 True,执行了 test() 函数

$ python
Python 3.8.3
>>>
>>> import Hello
>>>
>>> Hello.test()
Hello, world!

↑ 通过导入的方式运行这个文件,所以 if 为 False,没有执行 test() 函数,等到 Hello.test() 主动调用时才执行了 test() 函数

总结

一个 .py 文件就是一个模块 module
一个带有 __init__.py 的文件夹就是一个包 package

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TCP404

老板大方~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值