Python基础-迭代器

本文介绍了Python中的迭代器,包括迭代器的取值、next函数、for循环的迭代原理以及如何自定义可迭代对象。接着讲解了生成器的概念,生成器作为迭代器的一种优雅实现,其特点在于按需生成元素,节省内存。文章还提到了生成器的取值、暂停和恢复的机制及其应用。最后,简要提及了Python的推导表达式。

一、迭代器

迭代器就是一个容器,将可迭代对象通过iter包起来

li = [1, 2, 3, 4, 5]
a = liter(li)     # 迭代器

1、迭代器的取值

print(next(a))    # 1
print(next(a))    # 2
print(next(a))    # 3    一个个取值

"""
1.访问者不需要去关心内部结构,只需要通过next不断去取下一个内容。
2.只能从头到尾依次访问,不能回退
3.便于循环比较大的数据集合,节省内存
"""

2. --next–

__next__:可迭代对象和迭代器的区别
可迭代对象有 __liter__
迭代器   __liter__, __next__
两者都可以 for 循环

3、for 实现迭代原理

li = [1, 2, 3, 4, 5]
itr = iter(li)
try:
    while True:  # 死循环
        b = next(itr)
        print(b)   # StopIteration 异常 超出范围
except StopIteration:
    pass

4、自定义可迭代对象

class Mylist:
    def __iter__(self):
        return iter([1, 2, 3, 4, 5])


a = Mylist()
for i in a:
    print(i)

二、生成器

1、生成器的定义

生成器:自定义迭代器更优雅的方式,本质还是一个迭代器

类似函数的逻辑

def func():   # 容器
    yield 1

2、生成器的取值

def f():
    yield 1
    yield 5
    yield 8


g = f()
print(g)   # 生成器对象
print(next(g))  # 1
print(next(g))  # 5
for i in g:
    print(i)    # 1 5 8

3、暂停和恢复

def f():
    print(1)
    yield 5
    print(2)
    yield 9
    print(3)
    yield 8


g = f()     # 生成器对象

# 取值
next(g)   # 执行函数,至yidld终止 结果 1
# 用变量去接收
res = next(g)  # 返回yidld后面的值 结果 5
print(res)
res = next(g)  # 再次返回   结果 9
print(res)
# 魔术方法
res = g.__next__()  # 功能和上面一样 
print(res)          # 结果 8
# 如果超出取值范围会报错 StopIteration

# 和return的区别是 
return 会整体退出,不在执行之后的代码

4、应用

列表取值占内存,生成器只有在取用的时候才会生成这个元素加载到内存里

import time    # 导入模块


def f(con, n):
    count = 0
    while True:
        if count < n:
            yield con   # 生成器函数
            count += 1
        else:
            break


man = f("原擎, 加油加油", 10)

# 取值
for i in man:        # 循环取值
    print(i)
    time.sleep(1)    # 时间间隔

三、推导表达式

# a = [i for i in range(10)]
# print(a)
b = [[j for j in range(10)] for i in range(10)]
print(b)
内容概要:本文围绕六自由度机械臂的人工神经网络(ANN)设计展开,重点研究了正向与逆向运动学求解、正向动力学控制以及基于拉格朗日-欧拉法推导逆向动力学方程,并通过Matlab代码实现相关算法。文章结合理论推导与仿真实践,利用人工神经网络对复杂的非线性关系进行建模与逼近,提升机械臂运动控制的精度与效率。同时涵盖了路径规划中的RRT算法与B样条优化方法,形成从运动学到动力学再到轨迹优化的完整技术链条。; 适合人群:具备一定机器人学、自动控制理论基础,熟悉Matlab编程,从事智能控制、机器人控制、运动学六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)建模等相关方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握机械臂正/逆运动学的数学建模与ANN求解方法;②理解拉格朗日-欧拉法在动力学建模中的应用;③实现基于神经网络的动力学补偿与高精度轨迹跟踪控制;④结合RRT与B样条完成平滑路径规划与优化。; 阅读建议:建议读者结合Matlab代码动手实践,先从运动学建模入手,逐步深入动力学分析与神经网络训练,注重理论推导与仿真实验的结合,以充分理解机械臂控制系统的设计流程与优化策略。
好的,我会尽力回答你的问题。 首先,让我们来谈谈 Python 中的异常处理。在 Python 中,异常是程序在运行时遇到的错误或问题,它会导致程序停止运行并抛出一个异常。为了避免这种情况,我们可以使用 try/except 块来捕获并处理异常。例如: ``` try: # some code that might raise an exception except SomeException: # handle the exception ``` 其中,SomeException 是你想要捕获的异常类型。当代码运行到 try 块中的代码时,如果出现了 SomeException 异常,那么 except 块中的代码就会被执行。 接下来,让我们来谈谈 Python 中的对象。在 Python 中,一切都是对象,包括数字、字符串、函数等等。对象有一个类型,它定义了对象可以执行的操作。例如,数字类型可以执行加、减、乘等操作,字符串类型可以执行拼接、切片等操作。你也可以创建自己的对象,并定义它们的类型和操作。 最后,让我们来谈谈 Python 中的迭代器迭代器是一种对象,它可以让你逐个访问一个序列中的元素。Python 中的迭代器是通过 __iter__ 和 __next__ 方法实现的。__iter__ 方法返回一个迭代器对象,__next__ 方法返回序列中的下一个元素。例如: ``` class MyIterator: def __init__(self, data): self.data = data self.index = 0 def __iter__(self): return self def __next__(self): if self.index >= len(self.data): raise StopIteration result = self.data[self.index] self.index += 1 return result my_iter = MyIterator([1, 2, 3]) for item in my_iter: print(item) ``` 在上面的例子中,我们创建了一个名为 MyIterator 的迭代器对象。它有一个 data 属性,表示要迭代的序列,以及一个 index 属性,表示当前迭代的位置。__iter__ 方法返回 self,表示它本身就是一个迭代器对象。__next__ 方法返回序列中的下一个元素,并将 index 属性加 1。当迭代器遍历到序列末尾时,会抛出 StopIteration 异常,表示迭代结束。 希望这些信息能够对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值