Python青少年简明教程:模块

Python青少年简明教程:模块

Python模块是一种组织代码的方式,用于将相关的函数、类和变量分组在一起,从而提高代码的可重用性和可维护性。一个模块通常是一个包含Python代码的文件,文件名以.py作为扩展名。使用模块,可以在不同的Python脚本之间共享代码,而不需要重复编写相同的代码。

概述

Python模块可以分为以下几类:

内置模块

    Python标准库中自带的模块,如math、os、sys、tkinter等。这些模块在安装Python时已经包含在内,可以直接导入使用。

【math:提供了数学函数,如三角函数、指数函数、对数函数等。
os:提供了与操作系统交互的功能,如文件和目录操作、进程管理等。
sys:提供了与Python解释器交互的功能,如访问解释器参数、获取版本信息等。
tkinter是Python的一个内置模块,提供了GUI(图形用户界面)编程的功能。它允许你创建窗口、按钮、文本框等用户界面元素,并进行交互。】

第三方模块

    由第三方开发者创建的模块,提供了丰富的功能和扩展,使得Python开发更加高效。第三方模块在首次使用前必须安装之,通过包管理工具(如pip)进行安装。例如,requests、numpy、pandas等。

【Requests:提供了用于HTTP请求的库,用于进行网络通信和数据获取。
NumPy 用于科学计算的库,提供支持大型、多维数组和矩阵的功能。
Pandas 用于数据分析和数据处理的库,支持数据结构和数据操作。】

自定义模块

    用户自己创建的模块,通常是为了解决特定问题或实现某些特定功能。Python自定义模块可以包含函数、类和变量等,这些都可以被其他Python文件通过import语句引入。自定义模块是代码复用和组织代码结构的有效方式。

模块可以通过import语句在其他Python脚本中导入使用。

Python还支持包(package)的概念,即包含多个模块的目录。Python多文件编程的的基础是模块。在Python中,模块就是文件,文件就是模块。通过模块,可以将代码组织成逻辑单元,并通过导入和使用其他模块来实现功能的复用和组合。
包是包含多个模块的目录,可以进一步组织大型项目。包中可以包含一个 __init__.py 文件(在Python 3.3+中引入了命名空间包(Namespace Packages)的概念,不需要包含__init__.py)。

Python中的模块(Module)、包(package)和库(library):

阅读Python资料时,你可能会看到这些说法,什么意思呢?

Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。或者说是 Python 代码的一种组织单位。模块包含可重用的函数、类或变量。

包(Package)是一种组织相关模块的方式,本质上是一个包含多个模块的目录。多个模块放在一个文件夹,就是一个包(package)。在早一点的 Python 版本(Python 3.3 之前)中,如果一个文件夹下有一个 __init__.py 文件,那我们就称之为包。在后来的 Python 版本(Python 3.3 开始)中,就没有这个要求了,只要是文件夹就可以当作包(package),简单地说,包由相关目录里的模块构成。包可以包含子包,形成层次结构——每一层都可以包含模块文件和子包目录。

包(Package)的作用:
 a.组织相关的模块。
 b.避免命名冲突。
 c.提供一种层次结构来组织代码。

python中的库(Library)是参考其它编程语言的说法,是一个更宽泛的术语,通常指一组相关的包或模块的集合。既可以是一个模块也可以是一个包,是对模块或包的通俗的说法。例如:Python标准库是Python内置的一大组模块和包;第三方的NumPy、SciPy 通常被称为科学计算库。

Python 提供了几种导入模块的方式,每种方式都有其特定的用途和语法。以下是主要的导入方式:

☆基本导入:

import module_name

使用时需要加模块名前缀:module_name.function_name()

☆从模块中导入特定项:

from module_name import function_name, class_name

可以直接使用导入的函数或类,无需模块名前缀

☆导入所有内容(通常不推荐):

from module_name import *

可以使用模块中的所有内容,但可能导致命名冲突

☆使用别名:

import module_name as alias

from module_name import function_name as fn

使用别名可以简化长模块名或避免命名冲突

☆相对导入(在包内使用):

from . import module_name

from ..subpackage import module_name

用于包内部模块之间的导入

☆导入子模块:

import package.submodule

导入包中的特定子模块

包(Package

包(Package)是一种组织相关模块的方式,本质上是一个包含多个模块的目录。

包可以包含子包,形成层次结构,也即是,每一层都可以包含模块文件和子包目录。例如:有一个名为 'myproject' 的包,它可能有如下结构:

myproject/
├── __init__.py
├── module1.py
├── module2.py
└── subpackage1/
    ├── __init__.py
    ├── module3.py
    └── subpackage2/
        ├── __init__.py
        └── module4.py

每个包和子包目录中通常都有一个__init__.py文件,这个文件可以为空,也可以包含初始化代码,它标识该目录是一个Python包。

这种层次结构使得大型项目更加组织有序,便于管理和维护。它允许开发者将相关功能分组,同时保持清晰的结构和命名空间。

导入方式

可以使用点号来访问子包和模块。例如:

from myproject.subpackage1.subpackage2 import module4

在包的结构中,可以使用相对导入来引用同级或上级包中的模块。例如,在 module3.py 中:

from . import module4  # 导入同级的 module4

from .. import module1  # 导入上一级的 module1

Python模块(包、库)的查看、安装、验证和卸载

下面介绍是在Windows操作系统环境中的cmd中进行。cmd的打开:按下win键+R键(即先按下  键,再按下R键) 右击“开始”->单击“运行”,弹出“运行”窗口,参见下图:

查看已安装的模块,在cmd窗口中,输入如下命令后,按下回车(标有Enter)键:

pip list

这会显示所有已安装的包及其版本。

安装模块(在cmd窗口中):

pip install package_name

例如:pip install numpy

验证安装(在cmd窗口中):

pip show package_name

卸载模块(在cmd窗口中):

pip uninstall package_name

假设电脑中安装多个python版本,如何查看、安装、验证、卸载模块(包、库),请在pip前面加入

py -X.Y -m

其中X.Y代表Python版本,多余的部分舍弃如3.10.5,取3.10,即只取第二个点前的部分。

如:查看特定Python 3.10版本的已安装模块(在cmd窗口中):

py -3.10 -m pip list

自定义模块

模块实际是一个包含Python代码的文件,其文件名以 .py 结尾。要创建一个模块,只需创建一个Python文件,并在其中定义函数、类或变量。例如,创建一个名为 mymodule.py 的自定义模块(创建一个Python代码文件):

# mymodule.py
"""这是一个示例模块(module)"""

def greet(name):
    return f"Hello, {name}!"

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

    def say_hello(self):
        return f"Hi, I'm {self.name}."

提示:

1)模块名应使用小写字母,可以包含下划线。

2)避免使用与内置模块相同的名称。

3)在模块顶部可以添加文档字符串,描述模块的功能。

要使用模块中的内容,需要先导入该模块。可以使用 import 语句来导入模块:

import mymodule

print(mymodule.greet("Alice"))  # 输出: Hello, Alice!

person = mymodule.Person("Bob")
print(person.say_hello())  # 输出: Hi, I'm Bob.

注意,Python创建和使用自定义模块时,文件路径是一个重要的方面,确保你的模块文件位于Python解释器能够找到的路径。通常来说,将模块文件放在与你的主程序文件同一目录下是最简单的方式。Python 的模块导入机制要求模块(即 Python 文件)在同一目录下或在 Python 的搜索路径中才能被找到。

创建复杂的程序时,可以将其拆分为多个模块,以便更好地管理。例如创建一个简单的图书管理系统,该系统可以添加、删除和查询图书。我们可以将这个程序拆分为几个模块:
book.py:负责图书的定义和相关操作。
library.py:负责图书馆的管理,包括添加、删除和查询图书。
main.py:主程序,用户界面与交互。

假设你目录结构
book/ 
    │
    ├── book.py
    ├── library.py
    └── main.py

book.py定义了两个函数:create_book用于创建一个字典表示的图书,book_to_string用于将图书信息转换为字符串格式。源码如下:

# book.py

def create_book(title, author):
    return {"title": title, "author": author}

def book_to_string(book):
    return f"{book['title']} by {book['author']}"

library.py提供了三个函数:add_book用于向库中添加图书,remove_book用于从库中删除指定标题的图书,list_books用于列出所有图书。源码如下:

# library.py
import json
from book import create_book, book_to_string

def load_library(filename):
    try:
        with open(filename, 'r') as f:
            return json.load(f)
    except FileNotFoundError:
        return []

def save_library(library, filename):
    with open(filename, 'w') as f:
        json.dump(library, f)

def add_book(library, title, author):
    new_book = create_book(title, author)
    library.append(new_book)

def remove_book(library, title):
    library[:] = [book for book in library if book['title'] != title]

def list_books(library):
    return [book_to_string(book) for book in library]

main.py作为程序入口,通过用户输入调用这些函数来进行操作。在这个简单示例中,当你运行 main.py 时,程序会尝试加载名为 library.json 的文件。如果该文件不存在,程序将创建一个新的空列表来表示图书馆。当你添加或删除图书并选择退出时,程序会将当前的图书数据保存到 library.json 文件中。library.json会被创建并存储在与 main.py 文件相同的目录中。每本图书包含标题和作者的信息。源码如下:

# main.py
from library import add_book, remove_book, list_books, load_library, save_library

def main():
    filename = 'library.json'
    library = load_library(filename)

    while True:
        print("\n1. Add Book")
        print("2. Remove Book")
        print("3. List Books")
        print("4. Exit")

        choice = input("Choose an option: ")

        if choice == '1':
            title = input("Enter the book title: ")
            author = input("Enter the author's name: ")
            add_book(library, title, author)
            print(f"Added '{title}' by {author}.")

        elif choice == '2':
            title = input("Enter the book title to remove: ")
            remove_book(library, title)
            print(f"Removed '{title}' from the library.")

        elif choice == '3':
            books = list_books(library)
            if books:
                print("\nBooks in the Library:")
                for book in books:
                    print(book)
            else:
                print("No books in the library.")

        elif choice == '4':
            save_library(library, filename)  # Save data before exiting
            break

        else:
            print("Invalid option! Please try again.")

if __name__ == "__main__":
    main()

如果你将这些文件放在不同的目录中,这涉及到更复杂的项目结构,你需要确保使用合适的包结构和导入语句,或者将所需的模块添加到 Python 的搜索路径中。

通过使用模块,Python实现了代码的模块化和可重用性,这是构建大型、复杂应用程序的基础。

模块系统使得代码组织更加清晰,协作开发更加容易,同时也提高了代码的可维护性,提高代码的可扩展性和重用。

1. 代码组织更加清晰

通过将代码分割成多个模块,每个模块负责特定的功能或逻辑,整个项目的结构变得更加清晰。例如,一个大型项目可以有独立的模块来处理数据库操作、用户认证、API请求等。使得开发者可以快速找到和理解某个特定功能代码所在的位置。

2. 协作开发更加容易

在一个团队中,不同的开发者可以同时工作在不同的模块上,而不会相互干扰。例如,一个开发者可以专注于用户认证模块,另一个开发者则可以处理数据库操作。这种分工不仅提高了效率,还减少了合并冲突的可能性。

3. 提高代码的可维护性

每个模块封装了特定的功能,实现了隔离,使得修改和调试变得更加容易。如果某个功能需要修改,只需更新对应的模块,而不必担心影响到其他部分。这种隔离还减少了引入错误的风险。

4. 提高代码的可扩展性和重用

通过定义良好的接口(函数、类等),新功能可以轻松地添加到现有系统中,而无需大规模重构。例如,可以为现有项目添加新的API端点或新的数据库查询方法,只需创建新的模块或在现有模块中添加新函数即可。

在 Windows 上运行 .py 文件最常用的几种方式

前提是 Python 安装正确

1.使用 IDLE(Python 的集成开发环境):

a. 右键点击 .py 文件

b. 选择"Edit with IDLE"

c. 在 IDLE 中打开文件后,按 F5 键或选择 Run > Run Module

2.使用命令提示符(CMD):

a. 打开命令提示符(可以在开始菜单中搜索"cmd")

b. 使用 cd 命令导航到包含 .py 文件的目录

c. 输入以下命令并按回车:

python your_script.py

3.直接双击 .py 文件:

在Windows系统中,当您双击一个 .py 文件来运行它时,通常会打开一个命令行窗口并执行该Python脚本。

如果脚本执行非常迅速,窗口会在执行完毕后立即关闭,这样您可能无法看到任何输出信息。要解决这个问题,可以采取以下几种方法:

a.在脚本末尾添加 input():

在脚本最后添加一行代码,例如:

input("Press Enter to exit...")

b.创建一个批处理文件:

创建一个 .bat 文件来运行 Python 脚本,内容如下:

@echo off

python your_script.py

pause

将这个批处理文件和your_script.py放在同一目录中。当双击运行此批处理文件时,它会在脚本执行完后显示“Press any key to continue...”的提示,直到您按下任意键。

进一步学习了解可见:

Python第三方模块(库、包)安装、卸载与查看及常见问题解决 https://blog.csdn.net/cnds123/article/details/104393385

python之import语句的用法 https://blog.csdn.net/cnds123/article/details/118437585

python中的自定义模块及其使用 https://blog.csdn.net/cnds123/article/details/107087019

python复杂程序的组织讲座 https://blog.csdn.net/cnds123/article/details/108614392

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值