[Python学习篇] Python模块和包

模块是什么?

Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。模块能定义函数,类和变量,模块里也能包含可执行的代码。

python模块就是java中的类文件

导入模块

方式一:

语法:导入

  • import 模块名
  • import 模块名1, 模块n    # 不推荐

语法:使用

模块名.功能

示例:

import random

random.random()
方式二:

语法:使用时,省去模块名,直接使用功能名即可。

  • from 模块名 import 功能名                # 导入模块中的部分功能
  • from 模块名 import 功能名1, 功能名n
  • from 模块名 import *                         # 导入模块中的所有功能

语法:使用

功能名()

示例:

from random import random

# 使用时,省去模块名,直接使用功能名即可
print(random())
方式三:

语法:导入

  • import 模块名 as 别名
  • from 模块名 import 功能名 as 别名

语法:使用

import 模块名 as 别名

别名.功能名

示例:

import random as r

print(r.random())

语法:使用

from 模块名 import 功能名 as 别名

别名()

示例:

from random import randint as r_int, random as r_dom

print(r_dom())

制作模块

在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。 也就是说自定义模块名必须要符合标识符命名规则。

示例:

1. 制作模块

# my_module.py

def add(a, b):
    return a + b


class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        return f"{self.name} 和你说 hello!"

2. 使用模块

import my_module

print(my_module.add(10, 20))  # 30

dog = my_module.Animal("Dog")
print(dog.speak())  # Dog 和你说 hello!

模块中的测试功能

如果想在模块中用于测试的方法自己可以使用,不被调用者使用,可以使用 `__name__`, `__name__`在自己调用时打印`__main__`,在被调用者打印`模块名`。

# my_module.py

def add(a, b):
    return a + b


if __name__ == '__main__':
    print(__name__)    # __main__
    print(add(1, 1))

模块查找顺序

当导入一个模块,Python解析器对模块位置的搜索顺序是:

  1. 当前目录
  2. 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
  3. 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/

模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

注意:

  • 自己的文件名不要和已有模块名重复,否则导致模块功能无法使用
  • `使用from 模块名 import 功能`的时候,如果功能名字重复,调用到的是后定义或导入的功能。

__all__

如果一个模块文件中有`__all__`变量,当使用`from xxx import *`导入时,只能导入这个列表中的元素。

# my_module.py

__all__ = ["test1", "test2"]


def test1(a, b):
    return a + b

def test2(a, b):
    return a - b

def test3(a, b):
    return a * b


Python 包是一个包含多个模块的文件夹,用于组织和结构化 Python 项目。包允许开发者将相关模块组合在一起,形成一个层次结构,以便于管理和重用代码。

制作包

[New] — [Python Package] — 输入包名 — [OK] — 新建功能模块。

注意:新建包后,包内部会自动创建`__init__.py`文件,这个文件控制着包的导入行为。

导入包

方式一:

语法:

import 包名.模块名

包名.模块名.功能名

import module.my_module1

module.my_module1.test1(1, 2)

方式二:

语法:

from 包名 import *


模块名.功能

注意:

使用 `from 包名 import *` 必须在`__init__.py`文件中添加`__all__ = []`,控制允许导入的模块列表。

使用 `from 包名 import 模块名` 的时候不需要管`__init__.py`文件的`__all__ = []`

示例:

from module import *

my_module1.test1(1, 2)

相关推荐

  1. Python学习之路-模块

    2024-07-11 18:14:02       55 阅读
  2. Python 模块

    2024-07-11 18:14:02       50 阅读
  3. Python模块

    2024-07-11 18:14:02       22 阅读
  4. Python模块

    2024-07-11 18:14:02       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 18:14:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 18:14:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 18:14:02       58 阅读
  4. Python语言-面向对象

    2024-07-11 18:14:02       69 阅读

热门阅读

  1. 搭建discuz论坛(lvs+nginx+http+mysql+nfs)8台服务器

    2024-07-11 18:14:02       18 阅读
  2. 【AI大模型】如何在企业环境中部署GPT-3/GPT-4模型

    2024-07-11 18:14:02       22 阅读
  3. 图论学习 c++Ford-Fulkerson 方法

    2024-07-11 18:14:02       19 阅读
  4. 主线程结束子线程不再执行

    2024-07-11 18:14:02       23 阅读
  5. 手写函数柯里化示例

    2024-07-11 18:14:02       18 阅读
  6. 常微分方程的离散化

    2024-07-11 18:14:02       23 阅读
  7. Linux下解压.tar.gz文件

    2024-07-11 18:14:02       17 阅读
  8. 利用nodejs实现简单的静态文件托管

    2024-07-11 18:14:02       15 阅读
  9. 力扣题解( 最长递增子序列)

    2024-07-11 18:14:02       24 阅读
  10. less和sass有啥区别哪个更加好

    2024-07-11 18:14:02       21 阅读