python基础20_递归_迭代器_生成器

今天讲的内容呢?就是真的了解了,了解即可

放松一下,

先来讲讲递归

那么什么是递归呢?

比如我举一个生活中的例子

你去电影院看电影,坐在某一行,对吧,但是你不知道自己是第几行

于是呢,就找前面的兄弟,前面那哥们呢也不知道是第几行,就再问前面的那哥们,前面的也不知道啊,对吧,就再问前面那哥们,一直问啊,问到了第一行,然后第一行的人就给他讲我第一行的

然后第二行的就知道,哦原来我第二行的,然后给第三行的人说,我第二行的,然后第三行的通过2+1 他就知道,原来他是第三行的,依次类推,最前面问的那哥们就知道他在第几行了

 代码如下

例子1

# 计算7的阶乘
def func(n):
    if n == 1:
        return 1
    return f"{n} * {func(n-1)}"
print(func(7))

例子2

def get_my_pos_in_line(persion):
    """
    
    :param persion: 我前面的人数
    :return:  我在第几行
    """
    if persion == 0: #如果前面没人了就返回1
        return 1
    return 1 + get_my_pos_in_line(persion-1)

递归的核心就是函数自己调用自己

递归呢可以是一种思路,把软件的大问题,分解成中问题,然后呢,在分解成小问题.虽然递归的使用可能会消耗过多的性能,但是这种思路是值得我们使用的.

下面呢讲讲迭代器

在讲迭代器之前呢,先讲讲什么是迭代

迭代就是对一堆数据进行一些有意义,有规律的操作,(增加修改)

那么使用迭代呢,我们要准备两个东西,

一个呢就是被迭代的数据-可迭代对象,你比如说集合,元组,列表,字符串等等

还有一个东西呢,叫做迭代器对象,这个对象呢?你也可以理解成一个变量,里面存储了方法,可以对可迭代对象进行操作

通俗点解释,我们可以把迭代比作电视剧的剧集,而迭代器则是用来播放这些剧集的播放器。当我们使用迭代器时,我们可以像通过播放器一集一集地观看电视剧一样,逐个查看和处理集合中的元素。

迭代器使用如下

str_0 = "hello" #这个就是可迭代对象
iterator = str_0.__iter__()  #这个就是把str_0生成的迭代器赋值给了iterator
item = iterator.__next__() #然后通过__next__()函数依次取出迭代器里面的值
print(item)
item = iterator.__next__()
print(item)
item = iterator.__next__()
print(item)
item = iterator.__next__()
print(item)
item = iterator.__next__()
print(item)

还有另一种写法,结果都是相同的

str_0 = "hello" #这个就是可迭代对象
iterator = iter(str_0) #这个就是把str_0生成的迭代器赋值给了iterator
item = next(iterator) #然后通过__next__()函数依次取出迭代器里面的值
print(item)
item = next(iterator) 
print(item)
item = next(iterator) 
print(item)
item = next(iterator) 
print(item)
item = next(iterator) 
print(item)

前面我们不是讲了for循环吗?对吧,其实for循环的实现原理也是迭代器

下面是 ​for​循环底层实现的一个简化描述:

首先,​for​循环调用内置函数 ​iter()​传入可迭代对象,来获取一个迭代器。

接下来,在每次循环迭代过程中,​for​循环使用内置函数 ​next()​从迭代器中获取下一个元素。

循环将获取到的元素赋值给循环变量,并执行循环体中的代码。

当迭代器中没有更多元素时,​next()​函数将引发StopIteration异常,​for​循环将捕获该异常并结束循环。

这种实现方式使得 ​for​循环在处理可迭代对象时更加方便简洁,不需要手动创建迭代器和处理StopIteration异常。

前面迭代器讲完了,我们再讲讲生成器

生成器和迭代器是类似的

本质上来说是一个自定义的迭代器. 作用就是自己制定一个规则,然后按照规则生成想要的数据

def fibonacci_generator(n):
    a, b = 0, 1
    count = 0
    while count < n:
        yield a
        a, b = b, a + b
        count += 1

fib_gen = fibonacci_generator(5)
for num in fib_gen:
    print(num)
def even_generator(start, end):
    while start <= end:
        if start % 2 == 0:
            yield start
        start += 1

even_gen = even_generator(1, 10)
for num in even_gen:
    print(num)

也可以理解成在生成器函数里面有循环,然后每次循环遇到yield都会把值加入进入生成器对象,但是呢函数不会停止,不会像return一样,遇到就直接返回一个数,并直接停止函数,而循环的停止是跟其自身的判定条件有关的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值