适合纯文科生的 python 100个知识点 基础三

本文介绍了Python中时间日期的处理,包括获取当前时间、格式化时间、时间加减,还讲解了包管理工具pip的常用命令,如安装、卸载、查看已安装包。此外,讨论了装饰器的概念和使用示例,以及生成器和迭代器的功能和应用,如处理大型数据和实现异步编程。
摘要由CSDN通过智能技术生成

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的答案总结的知识点,有不足之处请大佬们给出反馈。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值