跟着查老四学Python Day 5: 模块 包和常用库

例行寒暄之后,就请查老四开始讲课了

模块

查老四:好的,让我们开始学习第一项内容:Python模块的概念及如何导入模块。

Python 模块是一个包含 Python 定义和语句的文件。模块可以被其他程序导入,并在该程序中使用。这样,我们就可以将程序拆分为多个模块,提高代码的复用性和可维护性。

在 Python 中,使用 import 语句导入模块。下面是一些示例:

import math
print(math.pi)

这里我们导入了 Python 的标准库 math 模块,并打印了其中的圆周率值。这样我们就可以在代码中使用 math 模块中定义的函数和变量了。

还有其他的导入方式,例如:

from math import pi
print(pi)

这里我们使用 from ... import 语句,直接导入 math 模块中的 pi 变量。这样可以避免每次使用时都要写 math.,方便代码的编写。

我们也可以给导入的模块取别名,以便更方便地使用:

import math as m
print(m.pi)

这里我们将 math 模块取别名为 m,这样就可以通过 m 来使用模块中的函数和变量。

练习题:请编写一个程序,导入 random 模块,并生成一个 1 到 100 之间的随机整数。提示:可以使用 random.randint(a, b) 函数来生成指定范围内的随机整数。


练习

import random

# 生成1到100之间的随机整数
random_number = random.randint(1, 100)
print(f"生成的随机整数为:{random_number}")

解释:

  • import random 导入了 Python 内置的 random 模块。
  • random_number = random.randint(1, 100) 使用 randint 函数生成一个 1100 的随机整数,并将其赋值给 random_number 变量。
  • print(f"生成的随机整数为:{random_number}") 使用 f-string 格式化字符串,将生成的随机整数输出到控制台。

对了答案,基本一致

老猫:好,那我们继续下一节内容

查老四:好的,接下来我们将学习第二个主题:Python包的概念及如何创建和使用包。

在 Python 中,包是一种将模块组织在一起的方式。包可以包含多个模块,也可以包含其他的包,从而形成更为复杂的模块组织结构。包的主要作用是将模块进行归类和组织,便于维护和管理。

在 Python 中,包通常是一个文件夹,其中包含一个名为 __init__.py 的文件和其他的模块文件。这些模块文件可以是 .py 文件、.pyc 文件或 .so 文件。

下面是一个示例,演示如何创建一个简单的 Python 包:

  1. 创建一个名为 mypackage 的文件夹,该文件夹包含 __init__.py 文件和一个名为 mymodule.py 的模块文件。
  2. mymodule.py 中定义一个名为 hello() 的函数,该函数打印一条问候语。
  3. __init__.py 中,导入 mymodule 模块,并定义一个名为 greet() 的函数,该函数调用 mymodule.hello() 函数,并打印一条问候语。

下面是代码示例:

mymodule.py 文件内容:

def hello():
    print("Hello, world!")

__init__.py 文件内容:

from . import mymodule

def greet():
    mymodule.hello()
    print("Nice to meet you!")

在上述示例中,我们将 mymodule.py 中定义的 hello() 函数导入到了 __init__.py 中,并定义了一个名为 greet() 的函数,该函数调用 mymodule.hello() 函数,并打印了一条问候语。

现在我们可以在其他程序中使用这个包了。例如,可以这样调用 greet() 函数:

import mypackage

mypackage.greet()

这样会输出以下内容:

Hello, world!
Nice to meet you!

练习题:请根据上述示例,编写一个名为 mypackage2 的 Python 包,包含一个名为 math.py 的模块文件,该模块文件定义一个名为 add() 的函数,该函数实现两个整数的加法运算。然后在 __init__.py 文件中,导入 math 模块,并定义一个名为 calculate() 的函数,该函数调用 math.add() 函数,实现两个整数的加法运算,并打印出结果。提示:为避免名称冲突,建议在 add() 函数前加上模块名作为前缀,例如 math_add()

练习

在项目中创建一个名为 mypackage2 的文件夹,并在其中创建一个名为 math.py 的文件,文件内容如下:

def math_add(x, y):
    return x + y

然后,在 mypackage2 文件夹中创建一个名为 __init__.py 的文件,文件内容如下:

from .math import math_add

def calculate(x, y):
    result = math_add(x, y)
    print(f"{x} + {y} = {result}")

接着,在主程序中导入并调用 calculate() 函数:

from mypackage2 import calculate

# 调用 calculate() 函数
calculate(3, 5)

解释:

  • from .math import math_add__init__.py 文件中导入了 math.py 模块中的 math_add() 函数。
  • calculate(x, y) 定义了一个 calculate() 函数,该函数调用了 math_add() 实现两个整数的加法运算,并输出结果。

对了答案,基本一致


老猫:函数和包的区别以及各自的适用场景是什么

查老四:函数和包都是 Python 中的重要概念,它们各自有不同的适用场景和功能。

函数是一段可以重复使用的代码块,它封装了特定的操作和算法,可以接收参数并返回值。函数的作用是将一个大问题分解成多个小问题,提高代码的可重用性和可维护性。

包是一种将多个模块组织在一起的方式,可以将多个相关的模块归为一个包中,方便管理和维护。包的作用是提供一种组织代码的方式,使得代码更加清晰、易于维护。

下面是两者的适用场景:

函数:

  • 对于需要重复使用的一段代码,可以将其封装成函数,提高代码的可重用性和可维护性。
  • 对于需要进行封装和抽象的操作和算法,可以将其实现为函数,使得代码更加清晰和易于理解。
  • 对于需要将一个大问题分解成多个小问题的情况,可以使用函数将问题分解并分别解决。

包:

  • 对于多个相关的模块,可以将其组织成一个包,便于管理和维护。
  • 对于需要将代码按照功能进行分组的情况,可以使用包将代码进行组织。
  • 对于需要引入外部库和模块的情况,可以将其作为包的形式引入,方便管理和维护。

总的来说,函数和包都是 Python 中非常重要的概念,它们可以提高代码的可重用性、可维护性和可读性。在编写代码时,应该根据具体的需求选择合适的方式进行封装和组织


标准库

老猫:好,我们继续下一节

查老四:好的,接下来我们将学习第三个主题:Python标准库中一些常用模块的基本用法。

Python标准库是Python自带的一些模块,它们都是经过精心设计和开发的,提供了大量实用的功能,例如操作系统、网络、文件、日期时间等方面的操作。在日常的开发中,使用标准库可以大大提高代码的开发效率和质量。

下面是一些常用的标准库模块及其基本用法:

  1. os 模块:提供了访问操作系统服务的功能,例如文件和目录操作、进程管理等。例如,可以使用 os.listdir(path) 函数获取指定目录下的所有文件和目录名称。

  2. sys 模块:提供了访问 Python 解释器和与之交互的功能。例如,可以使用 sys.argv 获取命令行参数,使用 sys.exit(code) 退出程序。

  3. datetime 模块:提供了处理日期和时间的功能,例如获取当前时间、格式化日期时间等。例如,可以使用 datetime.datetime.now() 函数获取当前日期和时间。

  4. random 模块:提供了生成随机数的功能。例如,可以使用 random.randint(a, b) 函数生成指定范围内的随机整数。

  5. math 模块:提供了常见的数学函数和常量。例如,可以使用 math.pi 常量获取圆周率,使用 math.sin(x) 函数计算正弦值。

在实际开发中,还有很多其他的标准库模块可以使用。我们应该根据具体的需求选择合适的模块进行使用,并熟悉它们的基本用法。

以下是Python标准库中一些常用模块的简要介绍和示例:

a) os模块:提供了与操作系统进行交互的函数,如文件和目录操作。

import os

current_directory = os.getcwd()  # 获取当前工作目录
print(f"当前工作目录:{current_directory}")

os.mkdir("test_dir")  # 创建一个名为'test_dir'的新目录

os.rename("test_dir", "new_test_dir")  # 将目录名从'test_dir'改为'new_test_dir'

os.rmdir("new_test_dir")  # 删除名为'new_test_dir'的目录

b) sys模块:提供了访问与解释器相关的变量和函数。

import sys

command_line_arguments = sys.argv  # 获取命令行参数列表
print(f"命令行参数:{command_line_arguments}")

sys.exit(1)  # 提前终止程序执行并返回状态码1(0表示正常退出,非0表示异常退出)

c) datetime模块:提供了处理日期和时间的类及函数。

import datetime

current_date = datetime.date.today()  # 获取当前日期
print(f"今天的日期:{current_date}")

current_time = datetime.datetime.now().time()  # 获取当前时间
print(f"当前时间:{current_time}")

after_10_days = current_date + datetime.timedelta(days=10)  # 计算10天后的日期
print(f"十天后的日期:{after_10_days}")

d) random模块:提供了生成随机数的函数。

import random

random_integer = random.randint(1, 100)  # 生成一个1到100之间的随机整数
print(f"生成的随机整数:{random_integer}")

random_float = random.uniform(0, 1)  # 生成一个0到1之间的随机浮点数
print(f"生成的随机浮点数:{random_float}")

练习题:请使用os模块创建一个名为exercise_dir的目录,然后在该目录下创建一个名为example.txt的文本文件,并向其中写入一段字符串:“This is a test.”。最后,删除该目录及其所有内容。

练习

import os

# 创建 exercise_dir 目录
os.mkdir("exercise_dir")

# 在 exercise_dir 目录下创建 example.txt 文本文件,并写入字符串 "This is a test."
with open("exercise_dir/example.txt", "w") as f:
    f.write("This is a test.")

# 删除 exercise_dir 目录及其所有内容
os.system("rm -rf exercise_dir")

解释:

  • os.mkdir("exercise_dir") 使用 os 模块中的 mkdir() 函数创建了一个名为 exercise_dir 的目录。
  • with open("exercise_dir/example.txt", "w") as f: 使用 with open() 语句打开 exercise_dir 目录下的 example.txt 文件,以写入模式 "w" 打开文件。这样可以确保程序执行完毕后文件被正确关闭。文件对象被赋值给变量 f
  • f.write("This is a test.")example.txt 文件中写入一段字符串。
  • os.system("rm -rf exercise_dir") 使用 os.system() 函数在终端中执行 rm -rf 命令删除 exercise_dir 目录及其所有内容。

对了答案,基本一致


老猫:请问还有那些常用标准库,或者什么地方可以查到标准库的列表清单

查老四:Python拥有一个丰富的标准库,包含许多实现各种功能的模块。以下是一些常用标准库模块的简要介绍:

  1. re:正则表达式模块,用于处理和匹配字符串中的模式。
  2. json:JSON数据处理模块,用于编码和解码JSON格式数据。
  3. csv:CSV文件读写模块,用于处理CSV格式数据。
  4. math:数学函数模块,提供了一些基本数学操作。
  5. collections:容器数据类型模块(如deque、Counter等),扩展了内建的容器类型。
  6. itertools:高效迭代操作模块,提供了一组用于处理迭代对象的工具。
  7. functools:函数式编程工具模块,提供了一些函数式编程的工具(如reduce、partial等)。
  8. threading:线程支持模块,提供了多线程编程的基本功能。
  9. multiprocessing:多进程支持模块,提供了多进程并行计算的功能。
  10. subprocess:子进程管理模块,允许你从Python代码中启动新的应用程序或命令。
  11. socket:网络通信模块,提供了基于套接字的网络通信功能。
  12. urllib:URL处理模块,它包含了处理URLs(如打开、解析等)的工具。
  13. http:HTTP相关模块,用于构建和处理HTTP请求和响应。

你可以访问Python官方文档查看完整的标准库列表及其相关信息:
https://docs.python.org/3/library/index.html

这个页面包含了所有Python标准库的概述和链接,你可以在这里浏览和查询各个模块的详细信息。请注意,这个链接是针对Python 3.x版本的,根据您使用的具体版本,可能会有一些差异。


当日总结

查老四:接下来我们将动手编写一些使用模块和包的Python程序,加深对这些概念的理解。

在这一部分,我们将使用之前学习的知识,结合使用模块和包的方法,编写一些实际的Python程序,来加深对这些概念的理解。

具体来说,我们将会完成以下两个任务:

任务一:使用 os 模块和文件操作,编写一个可以批量重命名指定目录下的所有文件的 Python 程序。

任务二:使用 random 模块和函数进阶,编写一个可以生成指定范围内的随机整数的 Python 函数,并进行测试。

在完成这两个任务的过程中,我们将会涉及到许多之前学习的知识点,例如控制结构、数据类型、函数、异常处理等。所以在实践的过程中,我们要根据具体的情况,选择合适的方式进行代码编写,同时注意代码的可读性和可维护性。

下面我们逐个来完成这两个任务。

任务一:使用 os 模块和文件操作,编写一个可以批量重命名指定目录下的所有文件的 Python 程序。

首先,我们需要了解一下 os 模块提供了哪些文件和目录操作的函数。常用的文件操作函数有:os.rename(src, dst) 重命名文件、os.remove(path) 删除文件、os.path.exists(path) 判断文件是否存在等。

在本任务中,我们需要使用 os.listdir(path) 函数获取指定目录下的所有文件和目录名称,然后遍历所有的文件和目录,对于每个文件,我们需要将其重命名为指定的格式,例如添加前缀或后缀。最后,我们需要输出重命名后的所有文件名称,以方便查看。

下面是任务一的代码示例:

import os

# 指定目录路径和重命名前缀
dir_path = '/path/to/your/directory'
prefix = 'new_'

# 获取指定目录下的所有文件和目录名称
file_names = os.listdir(dir_path)

# 遍历所有的文件和目录
for name in file_names:
    # 如果是文件,进行重命名操作
    if os.path.isfile(os.path.join(dir_path, name)):
        new_name = prefix + name
        os.rename(os.path.join(dir_path, name), os.path.join(dir_path, new_name))
        print(f'Renamed file {name} to {new_name}')

# 输出所有重命名后的文件名称
print(f'All files in {dir_path}: {os.listdir(dir_path)}')

在上述示例中,我们首先指定了目录路径和重命名前缀,然后使用 os.listdir() 函数获取指定目录下的所有文件和目录名称。接着,我们遍历所有的文件和目录,对于每个文件,我们使用 os.rename()函数 random_int(low: int, high: int, n: int) -> List[int] 中,我们使用了 random.randint(a, b) 函数生成指定范围内的随机整数,其中 ab 分别表示范围的起始和结束值。我们使用一个循环,重复调用 random.randint(a, b) 函数生成 n 个随机整数,并将这些整数保存到一个列表中。最后,我们返回这个列表作为函数的返回值。

main() 函数中,我们先调用 random_int(low, high, n) 函数生成一组随机整数,然后使用 print() 函数输出这组随机整数。

下面是任务二的完整代码示例

import random
from typing import List

def random_int(low: int, high: int, n: int) -> List[int]:
    """生成指定范围内的n个随机整数"""
    result = []
    for i in range(n):
        result.append(random.randint(low, high))
    return result

def main():
    """主函数"""
    low = 1
    high = 100
    n = 10
    random_nums = random_int(low, high, n)
    print(f"Random numbers between {low} and {high} (inclusive): {random_nums}")

if __name__ == '__main__':
    main()

在上述示例中,我们首先定义了 random_int(low: int, high: int, n: int) -> List[int] 函数,接着定义了 main() 函数作为程序的入口函数。最后,我们使用 if __name__ == '__main__': 语句来判断是否是直接运行这个脚本文件,如果是,则调用 main() 函数来执行程序。

通过完成任务一和任务二,我们学习了如何使用模块和包,以及如何利用之前学习的知识编写实际的 Python 程序。这些知识对于进一步学习 Python 编程非常重要,希望大家能够加强练习,掌握这些技能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值