Python基础语法
11 时间日期处理
11.1 时间日期处理的定义
时间日期处理是Python编程中的重要部分,下面是一些时间日期处理的代码和案例:
11.2获取当前时间
import datetime
now = datetime.datetime.now()
print("当前时间:", now)
输出:
当前时间: 2023-03-30 15:30:00.000000
11.3获取日期中的年、月、日等信息
import datetime
now = datetime.datetime.now()
print("当前年份:", now.year)
print("当前月份:", now.month)
print("当前日期:", now.day)
print("当前小时:", now.hour)
print("当前分钟:", now.minute)
print("当前秒数:", now.second)
print("当前微秒数:", now.microsecond)
输出:
当前年份: 2023
当前月份: 3
当前日期: 30
当前小时: 15
当前分钟: 30
当前秒数: 0
当前微秒数: 0
11.4时间格式化
import datetime
now = datetime.datetime.now()
# 格式化成年月日时分秒
print(now.strftime("%Y-%m-%d %H:%M:%S"))
# 格式化成年月日
print(now.strftime("%Y-%m-%d"))
# 格式化成月日时分秒
print(now.strftime("%m-%d %H:%M:%S"))
# 格式化成时分秒
print(now.strftime("%H:%M:%S"))
输出:
2023-03-30 15:30:00
2023-03-30
03-30 15:30:00
15:30:00
11.5时间加减
import datetime
now = datetime.datetime.now()
# 加上一天
new_date = now + datetime.timedelta(days=1)
print("明天:", new_date.strftime("%Y-%m-%d %H:%M:%S"))
# 减去一天
new_date = now - datetime.timedelta(days=1)
print("昨天:", new_date.strftime("%Y-%m-%d %H:%M:%S"))
# 加上一个小时
new_time = now + datetime.timedelta(hours=1)
print("一个小时后:", new_time.strftime("%Y-%m-%d %H:%M:%S"))
# 减去一个小时
new_time = now - datetime.timedelta(hours=1)
print("一个小时前:", new_time.strftime("%Y-%m-%d %H:%M:%S"))
输出:
明天: 2023-03-31 15:30:00
昨天: 2023-03-29 15:30:00
一个小时后: 2023-03-30 16:30:00
一个小时前: 2023-03-30 14:30:00
以上是一些基本的时间日期处理的代码和案例。在实际编程中,可能需要更加复杂的时间日期处理,这需要根据具体的需求来进行编程。
12 包的管理
12.1 包管理的定义
Python的包管理工具有很多,比较常用的有pip、conda等。下面是pip包管理的一些常用命令和示例代码:
12.2 安装包
pip install package_name
例如,安装numpy包:
pip install numpy
12.3 卸载包
pip uninstall package_name
例如,卸载numpy包:
pip uninstall numpy
12.4 查看已安装的包
pip list
12.5 查看包的详细信息
pip show package_name
例如,查看numpy包的详细信息:
pip show numpy
12.6 导出已安装的包列表
pip freeze > requirements.txt
这将把当前环境下所有已安装的包及其版本号导出到requirements.txt文件中。
12.7 从requirements.txt文件中安装包
pip install -r requirements.txt
这将安装requirements.txt文件中列出的所有包及其对应的版本号。
例如,如果requirements.txt文件中包含以下内容:
numpy==1.19.5
pandas==1.1.5
matplotlib==3.3.4
运行以下命令将安装这些包及其对应的版本:
pip install -r requirements.txt
上述是pip包管理的一些常用命令和示例代码,可以帮助我们方便地管理Python包。
13 装饰器
13.1 装饰器定义
装饰器是一种Python语言特性,用于在不修改已有函数代码的情况下,增加功能或修改函数行为。装饰器本质上是一个函数,可以接受函数作为参数并返回函数,以实现对函数的装饰。
13.2 装饰器的代码示例
# 定义一个装饰器函数,接受一个函数作为参数,并返回一个新函数
def my_decorator(func):
def wrapper():
print("函数调用前。")
func()
print("函数调用后。")
return wrapper
# 定义一个函数,它将被装饰器装饰
def say_hello():
print("你好,世界!")
# 使用装饰器装饰函数
say_hello = my_decorator(say_hello)
# 调用被装饰的函数
say_hello()
13.3 输出结果
函数调用前。
你好,世界!
函数调用后。
以上代码中,我们定义了一个装饰器函数my_decorator
,它接受一个函数作为参数,并返回一个新函数wrapper
。在wrapper
函数中,我们首先输出一行信息表示函数即将被调用,然后调用原始函数func
,最后再输出一行信息表示函数已经被调用完毕。在使用装饰器时,我们通过把装饰器函数my_decorator
作为一个参数传递给函数say_hello
,并重新将say_hello
指向装饰器返回的新函数wrapper
,从而实现对函数say_hello
的装饰。
下面是一个更具体的示例,我们定义一个装饰器函数check_age
,它接受一个函数作为参数,并返回一个新函数wrapper
,在wrapper
函数中,我们检查函数的第一个参数age
是否大于等于18,如果是,就调用原始函数,否则输出一条错误信息。
def check_age(func):
def wrapper(age, *args, **kwargs):
if age >= 18:
return func(age, *args, **kwargs)
else:
print("错误:年龄必须大于等于18岁")
return wrapper
@check_age
def enter_bar(age):
print("欢迎来到酒吧!")
enter_bar(20) # 输出 "欢迎来到酒吧!"
enter_bar(16) # 输出 "错误:年龄必须大于等于18岁"
以上代码中,我们使用装饰器@check_age
来装饰函数enter_bar
。当我们调用enter_bar
函数时,实际上是调用了check_age
返回的新函数wrapper
。在wrapper
函数中,我们首先检查参数age
的值是否大于等于18,如果是,则调用原始函数func
,否则输出一条错误信息。
14 生成器
14.1 装饰器定义
生成器是一种特殊类型的函数,它可以通过 yield 语句来暂停执行,并在下一次调用时继续执行。生成器可以用来迭代序列,节省内存空间,以及在处理大数据集合时提高效率。
14.2生成器的代码示例
def simple_generator():
yield 1
yield 2
yield 3
这个生成器会生成一个简单的序列,包括数字 1,2 和 3。当你在程序中调用这个生成器时,它会在每次调用 yield
语句时暂停,然后返回相应的值。你可以通过 next()
函数来获取下一个值:
gen = simple_generator()
print(next(gen)) # 输出 1
print(next(gen)) # 输出 2
print(next(gen)) # 输出 3
注意,如果你再调用一次 next()
函数,会抛出 StopIteration 异常,因为已经没有值可以生成了。
你也可以使用 for
循环来迭代生成器:
for value in simple_generator():
print(value)
这个循环将会输出:
1
2
3
14.3无限序列(斐波那契数列)
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
这个生成器会不断生成斐波那契数列的下一个值,无限循环下去。你可以通过 next()
函数或者 for
循环来获取数列的下一个值:
gen = fibonacci()
print(next(gen)) # 输出 0
print(next(gen)) # 输出 1
print(next(gen)) # 输出 1
print(next(gen)) # 输出 2
print(next(gen)) # 输出 3
for value in fibonacci():
if value > 100:
break
print(value)
这个程序将会输出斐波那契数列中小于 100 的所有值。
14.4生成器处理大型数据集合
def read_large_file(file_path):
with open(file_path) as file:
while True:
data = file.read(1024)
if not data:
break
yield data
这个生成器会读取一个文件,每次只读取 1024 个字节,然后暂停执行并返回读取的数据。在下一次调用时,它会从上一次离开的地方继续执行,读取下一个数据块。你可以使用 for
循环来遍历整个文件:
for data in read_large_file('large_file.txt'):
process_data(data)
在处理大型文件时,这种方法可以节省内存空间,并且避免一次性将整个文件读取到内存中导致程序崩溃。
另一个例子展示了如何使用生成器来实现一个简单的协程,让程序可以在多个任务之间切换执行:
def simple_coroutine():
print('coroutine started')
x = yield
print('received:', x)
coro = simple_coroutine()
next(coro) # 启动协程
coro.send(42) # 发送数据到协程
这个协程会在启动时打印一条信息,然后等待接收数据。当程序调用 send()
函数时,数据会被发送到协程,并在接收到数据后打印出来。通过不断地调用 send()
函数,程序可以在多个协程之间切换执行,从而实现异步编程的效果。
总之,生成器是 Python 中非常强大和灵活的功能,可以用于各种任务。如果你还没有学会如何使用生成器,建议多尝试一些例子,熟练掌握这个特殊类型的函数,以便在实际开发中可以灵活运用。
15 迭代器
15.1 装饰器定义
迭代器(Iterator)是Python中的一个重要概念,它可以用来遍历一个序列或集合的元素。迭代器提供了一种更加简便、高效的遍历方式,不需要使用循环来逐个访问元素,而是使用 next() 方法来逐个返回元素,直到遍历完整个序列或集合为止。
15.2 迭代器的代码示例,
实现了一个可以遍历数字 0 到 9 的迭代器对象:
class MyIterator:
def __init__(self, max_num):
self.max_num = max_num
self.current_num = 0
def __iter__(self):
return self
def __next__(self):
if self.current_num < self.max_num:
value = self.current_num
self.current_num += 1
return value
else:
raise StopIteration
# 创建迭代器对象
my_iterator = MyIterator(10)
# 遍历迭代器对象
for item in my_iterator:
print(item)
在上面的示例中,我们定义了一个名为 MyIterator 的迭代器类,该类包含了两个特殊方法:__init__()
和 __next__()
。__init__()
方法用于初始化迭代器对象,而 __next__()
方法则用于返回下一个元素的值。
在 __next__()
方法中,我们先判断当前数字是否小于最大数字,如果是,就返回当前数字并将当前数字加 1,否则就抛出 StopIteration 异常来表示迭代结束。
在主程序中,我们创建了一个 MyIterator 类的实例对象,并使用 for 循环来遍历迭代器对象。在每次迭代中,我们都会调用迭代器对象的 __next__()
方法来获取下一个元素,并将其输出到控制台上。
15.3 输出结果
运行上述代码,输出结果如下:
0
1
2
3
4
5
6
7
8
9
以上就是一个简单的迭代器示例,它演示了如何定义一个迭代器类,并使用 for 循环来遍历迭代器对象。在实际开发中,迭代器广泛应用于数据处理、算法实现、GUI编程等场景,可以大大提高程序的效率和可读性。
本文是结合ChatGPT的答案总结的知识点,有不足之处请大佬们给出反馈。