06. Python模块

2023-12-16 11:42:15

目录

1、前言

2、什么是模块

3、Python标准库模块

3.1、os模块

3.2、datetime 模块

3.3、random模块

4、自定义模块

4.1、创建和使用

4.2、模块命名空间

4.3、作用域

5、安装第三方依赖

5.1、使用 pip 安装单个依赖

5.2、从 requirements.txt 安装依赖

5.3、安装指定版本的依赖

5.4、从版本库安装依赖

6、from...import...as

7、小结


1、前言

Python 的强大之处之一就是其模块化编程的支持。模块是代码的组织单元,它允许你将代码划分为可重用的部分,从而提高代码的可维护性和可扩展性。今天我们一起来探讨 Python 模块的概念、创建和使用方法,以及一些常见的 Python 标准库模块。

2、什么是模块

为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。

模块是包含 Python 代码的文件,它可以包括变量、函数和类。通过将代码组织成模块,我们可以更好地组织代码、提高可重用性,并支持更好的命名空间管理。使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。

此外,Python为了避免模块名冲突,引入了按目录来组织模块的方法,称为包(Package)。如:

其中,first_demo.py,main.py就是一个名字分别叫做first_demo和main的模块。而first_demo存在模块冲突了,于是我们通过first包(Package)来组织,避免冲突。

3、Python标准库模块

Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用。如os模块、datetime模块、random模块等。使用内置模块我们只需要使用import导入该模块,然后就有了以模块名称为变量名的变量引用该模块,使用该变量就可以访问模块里的所有功能。

3.1、os模块

os 模块提供了与操作系统交互的功能,包括文件和目录操作、环境变量等。

import os

if __name__ == '__main__':
    """ 返回当前的工作目录 """ 
    """ Return a unicode string representing the current working directory. """
    print(os.getcwd())  

3.2、datetime 模块

datetime 模块用于处理日期和时间,提供了丰富的功能,如日期的格式化、时间的计算等。

from datetime import datetime 

if __name__ == '__main__':
    now_time = datetime.now()
    print("当前时间:", now_time)

3.3、random模块

random 模块用于生成伪随机数,提供了多种随机数生成函数。

import random

if __name__ == '__main__':
    for i in range(10):  # 打印10次
        print(random.randint(1, 100))

4、自定义模块

除了使用Python标准库中的模块以外,我们还可以按需定义自己的模块。这种方式在团队协作开发模式中非常有用。

4.1、创建和使用

创建模块非常简单,只需将相关代码保存在一个文件中,并使用 import 关键字在其他地方引入它。

定义一个my_module.py模块,里面定义了一个接收名称的函数,同时返回hello, xxx。

# 定义了一个sqy_hello函数,用于外部调用
def say_hello(name):
    return f"Hello, {name}!"

使用该模块:

# 使用import关键字引入该模块
import my_module

if __name__ == '__main__':
    # 调用该模块
    print(my_module.say_hello("张三"))

4.2、模块命名空间

模块创建了一个独立的命名空间,可以使用模块名来访问其中的变量和函数,从而避免命名冲突。如在my_module.py模块中定义一个变量,我们在引用该模块的函数中可以调用该变量,而不与自己模块冲突。如:

COUNTRY = "中国"


# 定义了一个sqy_hello函数,用于外部调用
def say_hello(name):
    return f"Hello, {name}!"

调用:

import my_module

COUNTRY = "中国111"

if __name__ == '__main__':
    print(my_module.say_hello("张三"), my_module.COUNTRY, "你好")

4.3、作用域

模块的作用域是指在模块中定义的变量、函数和类的可见性和访问范围。

在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用。而在Python中,是通过_前缀来实现的。正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI等。

类似__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__就是特殊变量,hello模块定义的文档注释也可以用特殊变量__doc__访问,我们自己的变量一般不要用这种变量名。

类似_xxx和__xxx这样的函数或变量就是非公开的(private),表示这个函数是“内部实现细节”或“私有”的,不应该被直接引用或调用。这是一种命名约定,告诉其他程序员,这个函数是模块内部使用的,不属于模块的公共接口。

def _internal_function():
    print("This is an internal function.")

def public_function():
    print("This is a public function.")

其中_internal_function 被认为是模块内部使用的,而 public_function 是模块的公共接口。

5、安装第三方依赖

除了Python自带的模块,自己定义的模块以外,通常还会使用别人定义好的第三方依赖。使用这些依赖,由于不在我们的Python库中,因此需要先进行安装。

5.1、使用 pip 安装单个依赖

在Python中,安装第三方模块,是通过包管理工具pip完成的。

pip install package_name

例如安装requests依赖:

pip install requests

5.2、从 requirements.txt 安装依赖

通常,在项目中会有一个名为 requirements.txt 的文件,其中列出了项目所需的所有依赖。你可以使用以下命令一次性安装所有依赖:

pip install -r requirements.txt

5.3、安装指定版本的依赖

如果你需要安装特定版本的依赖,可以使用 == 符号:

pip install package_name==1.2.3
# 指定安装最新版本
pip install --upgrade package_name

5.4、从版本库安装依赖

有时你可能需要从版本库(例如 GitHub)直接安装依赖。可以使用以下命令:

pip install git+https://github.com/username/repo.git

6、from...import...as

使用import引入模块时,引用模块的变量名默认为模块名。有时候如果模块名太长,我们可以通过as关键字,进行变量名重定义。如:

import my_module as mm  # 定义变量名为mm

if __name__ == '__main__':
    # 这里通过重定义的变量名mm访问模块功能
    print(mm.say_hello("张三"))

from ... import ... 是一种导入模块中特定成员(变量、函数、类等)的语法。这种方式允许你直接从模块中导入你需要的部分,而不是整个模块。如:

""" 
这里只导入了math模块中的sqrt函数
如果要导入多个函数,使用英文逗号,隔开即可 
如果需要引入全部模块,import后面跟上*号即可,这种方式不是推荐的做法,因为它可能导致命名冲突和代码不易读。
"""
from math import sqrt

result = sqrt(25)
print(result)

7、小结

Python 模块是模块化编程的基础,能够帮助我们更好地组织和管理代码。通过合理使用模块,我们可以提高代码的可读性、可维护性,并能够更容易地共享和重用代码。掌握模块的基本概念和高级用法,是成为 Python 高效开发者的重要一步。

文章来源:https://blog.csdn.net/p793049488/article/details/135029776
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。