zoukankan      html  css  js  c++  java
  • 函数(四)迭代器

    迭代器

    1 可迭代对象

    ​ 有 __ iter __ 的都是可迭代对象

    ​ 可迭代的对象:Python内置str、list、tuple、dict、set、file都是可迭代对象

    2 迭代器对象

    ​ 有 __ next __ 的可迭代对象叫做迭代器对象

    ​ 文件本身就是迭代器对象

    3 缺点

    ​ (1)取值麻烦,只能一个一个取,并且只能往后取,值取了就没了

    ​ (2)无法使用len()方法获取长度

    4 for循环原理

    ​ for循环称为迭代器循环,in后必须是可迭代的对象

    hobby_list2 = ['run','read']
    hobby_list2_iter = hobby_list2.__iter__()
    while True:
        try:
            print(hobby_list2_iter.__next__())
        except:
            break
    
    for i in hobby_list2:  # hobby_list2,把hobby_list2转化为可迭代对象
        print(i)
    

    三元表达式和列表推导式

    1 三元表达式

    ​ 条件成立时的返回值 if 条件 else 条件不成立时的返回值

    x = 10
    y = 20
    
    if x > y:
        print(x)
    else:
        print(y)
    
    print((x) if x > y else (y))
    

    2 列表推导式

    list = []
    lis1 = [i * 2 if i > 50 else i for i in range(100)]
    print(lis1)
    

    这两方式不推荐使用

    字典生成式

    print({i: i**2 for i in range(10)})
    

    拉链函数

    ​ 通过解压缩函数生成一个字典

    res = zip('abcd',[1,2,3,4])
    dic = dict()
    for k,v in res:
        dic[k] = v
    print(dic)
    
    print({k:v for k,v in zip('abcd',[1,2,3,4])})
    
    
    {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    

    生成器

    1 定义:自定义的迭代器

    2 yield关键字

    ​ 在函数中但凡出现yield关键字,再调用函数,就不会继续执行函数体代码,而是会返回一个值none

    3 yield 好处

    ​ 1.不会将所有数据取出来存入内存中;而是返回了一个对象;可以通过对象获取数据;用多少取多少,可以节省内容空间。

    ​ 2.除了能返回一个值,还不会终止循环的运行;

    def func():
        print(1)
        yield        # 不会执行print(2)
        print(2)
    
    
    g = func()
    print(g)
    

    4 yield与return的区别

    1. 相同点:两者都是在函数内部使用,都可以返回值,并且返回值没有类型和个数的限制
    2. 不同点:return只能返回一次之;yield可以返回多次值

    递归

    ​ 函数的嵌套调用是:函数嵌套函数。函数的递归调用:它是一种特殊的嵌套调用,但是它在调用一个函数的过程中,又直接或间接地调用了它自身。

    def foo():
        print('from foo')
        foo()
    
    foo()  # 进入死循环
    

    ​ 如果递归函数不断地调用函数自身,那么这个递归函数将会进入一个死循环,因此我们应该给递归函数一个明确的结束条件。

    1 直接调用

    ​ 直接在函数内部调用函数自身

    def foo():
        print('from foo')
        foo()
    
    foo()
    

    2 间接调用

    不在原函数体内调用函数自身,而是通过其他的方法间接调用函数自身

    def bar():
        print('from bar')
        foo()
    
    def foo():
        print('from foo')
        bar()
    
    bar()
    

    递归必须要有两个明确的阶段:

    1. 递推:一层一层递归调用下去,进入下一层递归的问题规模都将会减小

    2. 回溯:递归必须要有一个明确的结束条件,在满足该条件开始一层一层回溯。

      递归的精髓在于通过不断地重复逼近一个最终的结果。

  • 相关阅读:
    全代码实现ios-4
    集训第一次周赛题目及题解
    网站登录时密码忘记,通过向邮箱发送验证链接实现重置密码的实现方法
    hdu 1861-游船出租
    c#获取或修改配置文件
    今天做php经典实例,发现,我是对的,面试官给我说错了
    HDU 4637 Rain on your Fat brother 线段与半圆和线段交 简单题
    Qt之图标切分与合并
    标准容器的共性及举例
    如何提高数据库update更新的速度
  • 原文地址:https://www.cnblogs.com/einsam/p/10980564.html
Copyright © 2011-2022 走看看