例行寒暄之后,就请查老四开始讲课了
模块
查老四:好的,让我们开始学习第一项内容: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
函数生成一个1
到100
的随机整数,并将其赋值给random_number
变量。print(f"生成的随机整数为:{random_number}")
使用 f-string 格式化字符串,将生成的随机整数输出到控制台。
对了答案,基本一致
包
老猫:好,那我们继续下一节内容
查老四:好的,接下来我们将学习第二个主题:Python包的概念及如何创建和使用包。
在 Python 中,包是一种将模块组织在一起的方式。包可以包含多个模块,也可以包含其他的包,从而形成更为复杂的模块组织结构。包的主要作用是将模块进行归类和组织,便于维护和管理。
在 Python 中,包通常是一个文件夹,其中包含一个名为 __init__.py
的文件和其他的模块文件。这些模块文件可以是 .py
文件、.pyc
文件或 .so
文件。
下面是一个示例,演示如何创建一个简单的 Python 包:
- 创建一个名为
mypackage
的文件夹,该文件夹包含__init__.py
文件和一个名为mymodule.py
的模块文件。 - 在
mymodule.py
中定义一个名为hello()
的函数,该函数打印一条问候语。 - 在
__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自带的一些模块,它们都是经过精心设计和开发的,提供了大量实用的功能,例如操作系统、网络、文件、日期时间等方面的操作。在日常的开发中,使用标准库可以大大提高代码的开发效率和质量。
下面是一些常用的标准库模块及其基本用法:
-
os
模块:提供了访问操作系统服务的功能,例如文件和目录操作、进程管理等。例如,可以使用os.listdir(path)
函数获取指定目录下的所有文件和目录名称。 -
sys
模块:提供了访问 Python 解释器和与之交互的功能。例如,可以使用sys.argv
获取命令行参数,使用sys.exit(code)
退出程序。 -
datetime
模块:提供了处理日期和时间的功能,例如获取当前时间、格式化日期时间等。例如,可以使用datetime.datetime.now()
函数获取当前日期和时间。 -
random
模块:提供了生成随机数的功能。例如,可以使用random.randint(a, b)
函数生成指定范围内的随机整数。 -
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拥有一个丰富的标准库,包含许多实现各种功能的模块。以下是一些常用标准库模块的简要介绍:
re
:正则表达式模块,用于处理和匹配字符串中的模式。json
:JSON数据处理模块,用于编码和解码JSON格式数据。csv
:CSV文件读写模块,用于处理CSV格式数据。math
:数学函数模块,提供了一些基本数学操作。collections
:容器数据类型模块(如deque、Counter等),扩展了内建的容器类型。itertools
:高效迭代操作模块,提供了一组用于处理迭代对象的工具。functools
:函数式编程工具模块,提供了一些函数式编程的工具(如reduce、partial等)。threading
:线程支持模块,提供了多线程编程的基本功能。multiprocessing
:多进程支持模块,提供了多进程并行计算的功能。subprocess
:子进程管理模块,允许你从Python代码中启动新的应用程序或命令。socket
:网络通信模块,提供了基于套接字的网络通信功能。urllib
:URL处理模块,它包含了处理URLs(如打开、解析等)的工具。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)
函数生成指定范围内的随机整数,其中 a
和 b
分别表示范围的起始和结束值。我们使用一个循环,重复调用 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 编程非常重要,希望大家能够加强练习,掌握这些技能。