函数进阶 2------总结

迭代器

迭代器可以说成是重复,并且每一次的重复都是基于上一次的结果来的。

可迭代对象

python中一切皆对象,对这一切思想中,但凡有_iter_方法的对象,都是可迭代对象。

但是需要注意的是,数字类型的不是可迭代对象。

含有_____________iter_______________和___________next______方法的对象就是迭代器对象

有迭代器对象的目的:提供了不依赖索引取值的手段

it = [1,2,3,4]
it.__iter__()

tup = (1,2,3,4)
it.__iter__()

dic = {'a':1}
dic.__iter__()

se = {1}
se.__iter__()

fw = open('test.txt','at',encoding='utf8')
fw.seek(0,0)
fw.__iter__()

迭代取值的方法是基于上一个值来进行一行行取值。

it_iter = iter.__iter__()
print(it_iter.__next+__())
s = [1,2,3,4,5]
s = s.__iter__()

第一种打印方法:
# print(s.__next__())
# print(s.__next__())
# print(s.__next__())
# print(s.__next__())
# print(s.__next__())
注:在列表内的值不够的时候,会提示StopIteration的报错

第二种方法:解释for循环的原理
while True:
    try:
        print(s.__next__())

    except StopIteration:
        break

在执行到报错的时候会自动运行break

注:迭代器的主要作用就是来取值,他只能一行一行向后取取值,过于麻烦,而且在值取完之后就没有了,而且无法使用len()方法获取长度。

三元表达式

又称三目表达式,当条件成立走这里if条件,条件不成立走else调价

print(x) if x > y else print(y)

字典生成式

创建字典的两种方法:
例1:for循环生成
dic = {}

for i in range(10):
    dic[i] = i

print(dic)

例2:zip生成
lt1 = ['a', 'b', 'c']
lt2 = [1, 2, 3]

dic = {k: v ** 2 for k, v in zip(lt1, lt2)}
print(dic)

生成器

定义:含有yield关键字的函数叫做生成器。一个yelid相当于 一个next,暂停函数。

关于yeild与return特性的去区别

yeild的特性:

1.暂停函数

2.通过next取值,一个yeild相当于一个next。

return的特性:

1.终止函数

2.通过调用函数拿到值

递归

  • 什么是递归

    函数内部直接调用函数本身

    # 递归:
    # 1. 函数内部调用函数自己
    # 2. 必须要有退出条件
    # 3. 递归必须要有规律
    
  • import sys
    sys.setrecursionlimit(10) #设置最大递归次数
    print(sys.getrecursionlimit())
    
  • def a():
        x = 1
        print(x)
        a()
    a()
    
    #每一次递归不会结束函数,并且每一次递归都会开辟内存空间,如果一直开辟内存就炸掉了,所以最多递归1000次左右。
    
  • # 玉阳 20岁 ; 后面的同学大2岁,后面的后面的同学比后面的同学大2岁; 求第6位同学的年龄
    
    '''
    res = 30 
    res = 28 + 2
    res = 26 + 2 + 2
    res = 24 + 2 + 2 + 2
    res = 22 + 2 + 2 + 2 + 2
    res = 20 + 2 + 2 + 2 + 2 + 2
    res = 18 + 2 + 2 + 2 + 2 + 2 + 2
    '''
    
    def age(x):
        if x == 0:
            return 18
        x -= 1
        return age(x) + 2
    
    
    res = age(6)
    print(res)  # 32
    
原文地址:https://www.cnblogs.com/whkzm/p/11580577.html