Python基础知识学习总结(六)

一. 迭代器

1. 定义

迭代是Python最强大的功能之一,是访问集合元素的一种方式。

迭代器是一个可以记住遍历的位置的对象。

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

2. 方法

迭代器有两个基本的方法:iter() 和 next() 。

字符串,列表或元组对象都可用于创建迭代器。

list = ["潘家辉","你","好","腻害!"]
it = iter(list)    # 创建迭代器对象
print(next(it))   # 输出迭代器的下一个元素

3. 遍历

迭代器对象可以使用常规for语句、while语句等进行遍历。

list = ["潘家辉","你","好","腻害!"]

# for语句
it_for = iter(list)    # 创建迭代器对象
for i in it_for:
    print(i, end="")
print()

# while语句
it_while = iter(list)    # 创建迭代器对象
while True:
    try:
        # 尝试从迭代器中获取下一个元素
        item = next(it_while)
        print(item, end="")
    except StopIteration:
        # 如果迭代器耗尽,则捕获StopIteration异常并退出循环
        break

注意需要创建俩个迭代器

StopIteration异常

StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 next() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。

class MyNumbers:
    def __iter__(self):
        self.a = 1
        return self
    def __next__(self):
        if self.a <= 20:
            x = self.a
            self.a += 1 
            return x 
        else: 
            raise StopIteration 
myclass = MyNumbers()
myiter = iter(myclass) 
for x in myiter:
    print(x)

二. 生成器

在 Python 中,使用了 yield 的函数被称为生成器(generator)。

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

调用一个生成器函数,返回的是一个迭代器对象。

以下实例使用 yield 实现斐波那契数列。

import sys 
def fibonacci(n): # 生成器函数 - 斐波那契 
    a, b, counter = 0, 1, 0 
    while True: 
        if (counter > n): 
        return 
        yield a 
        a, b = b, a + b 
        counter += 1 
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
while True:
    try: 
        print (next(f), end=" ")
    except StopIteration: 
        sys.exit()

三. 日期

1. 日期和时间

Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。

Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。

时间间隔是以秒为单位的浮点小数。

每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。

Python 的 time 模块下有很多函数可以转换常见日期格式。如函数time.time()用于获取当前时间戳。

import time
import calendar
from datetime import datetime
ticks = time.time()
ts = calendar.timegm(time.gmtime())
current_time = datetime.now()
print("当前时间戳为:", ticks)
print(ts)
print(current_time)

2. 时间元组

什么是时间元组?
很多Python函数用一个元组装起来的9组数字处理时间:

序号字段
04位数年2008
11 到 12
21到31
3小时0到23
4分钟0到59
50到61 (60或61 是闰秒)
6一周的第几日0到6 (0是周一)
7一年的第几日1到366 (儒略历)
8夏令时-1, 0, 1, -1是决定是否为夏令时的旗帜

上述也就是struct_time元组。这种结构具有如下属性:

序号属性
0tm_year2008
1tm_mon1 到 12
2tm_mday1 到 31
3tm_hour0 到 23
4tm_min0 到 59
5tm_sec0 到 61 (60或61 是闰秒)
6tm_wday0到6 (0是周一)
7tm_yday1 到 366(儒略历)
8tm_isdst-1, 0, 1, -1是决定是否为夏令时的旗帜

我们可以使用 time 模块的 strftime 方法来格式化日期

import time # 格式化成YYYY-MM-DD HH:MM:SS形式
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) # 格式化成
print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())) # 将格式字符串转换为时间戳
a = "Sat Mar 28 22:24:24 2016"
print(time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y")))

 

3. 时间日期格式化

python中时间日期格式化符号:

  • %y 两位数的年份表示(00-99)
  • %Y 四位数的年份表示(000-9999)
  • %m 月份(01-12)
  • %d 月内中的一天(0-31)
  • %H 24小时制小时数(0-23)
  • %I 12小时制小时数(01-12)
  • %M 分钟数(00-59)
  • %S 秒(00-59)
  • %a 本地简化星期名称
  • %A 本地完整星期名称
  • %b 本地简化的月份名称
  • %B 本地完整的月份名称
  • %c 本地相应的日期表示和时间表示
  • %j 年内的一天(001-366)
  • %p 本地A.M.或P.M.的等价符
  • %U 一年中的星期数(00-53)星期天为星期的开始
  • %w 星期(0-6),星期天为星期的开始
  • %W 一年中的星期数(00-53)星期一为星期的开始
  • %x 本地相应的日期表示
  • %X 本地相应的时间表示
  • %Z 当前时区的名称
  • %% %号本身
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

晚睡早起₍˄·͈༝·͈˄*₎◞ ̑̑

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

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

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

打赏作者

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

抵扣说明:

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

余额充值