美文网首页
day11 生成器迭代器

day11 生成器迭代器

作者: _最美不是下雨天_ | 来源:发表于2019-01-07 17:36 被阅读0次

    一、递归函数

    1.什么是递归函数
    在函数中调用函数本身的函数就是递归函数

    2.递归的作用:循环能做的事,递归都能做

    3.怎么写递归函数f(n)
    第一步:确定临界值 --循环结束的条件,在临界值的地方要让函数结束!
    第二步:找关系 ---找当次循环和上次循环的关系
    找f(n)和f(n-1)
    第三步:假设函数的功能已经实现,通过f(n-1)来实现f(n)的功能

    求1-100

    def wg_sum(n):
        if n ==1:
            return 1
        return wg_sum(n-1)+n
    
    print(wg_sum(100))
    

    求斐波拉契数列第N个数

    def sequence(n):
        if n ==1 or n==2:
            return 1
        return sequence(n-1)+sequence(n-2)+n
    print(sequence(7))
    

    二、模块

    1.什么是模块
    在Python中一个py文件就是一个模块
    a.系统模块:例如:random模块、math模块等等
    json库 -提供json数据操作
    re模块 --提供正则表达式相关操作
    socket模块 - 提供Python套接字编程
    time模块 - 提供和时间相关的操作
    threading -提供和线程相关的操作

    b.自定义模块--自定义模块 -程序员自己创建的py文件
    自己写的模块
    别人写的模块 - 第三方库

    标准库和第三方库一般是通过模块提供变量、函数、类

    2.怎么使用模块
    import 模块名 -在程序中直接导入指定的模块,导入后可以使用模块中所有的全局变量(包含了变量、函数和类)
    导入后通过‘模块名.变量’来使用模块中的内容
    from 模块名 import 变量1,变量2 -在程序中导入指定的模块,导入后只能使用import后面的变量
    -导入后直接使用变量,不用在前面加‘模块名,’
    from 模块名 import * -在程序中直接导入指定的模块,导入后可以使用模块中所有的全局变量(包含了变量、函数和类)
    导入后通过‘模块名.变量’来使用模块中的内容 不用在前面加‘模块名,’
    3.导入模块的实质
    a.不管是使用import还是from -import,导入模块的时候都会执行模块中的代码
    b.Python中不会导入多次 Python会自动查重
    4.怎么阻止模块中其他代码执行 写在这个if语句中的代码不会被别的模块。
    if name == 'main':
    不会被执行的代码
    如果希望被其他模块使用的代码就放在if语句外面
    原理:每个模块都有一个name属性,代表模块名。默认情况下它的值是py文件的文件名
    当当前模块正在被执行的时候,模块属性name的值就会变成'main'

    5.重命名 -导入的时候可以对模块或者模块中的内容
    import 模块名 as 新模块名
    from 模块名 import 变量名1 as 新变量名1,变量名2,变量名3 as 新变量名3

    三、迭代器和生成器

    1.什么是迭代器(iter)
    是Python提供的容器型数据类型
    获取迭代器中的元素的时候只能从前往后一个一个的取,而且取了之后这个元素在迭代器中就不存在了
    2.迭代器的字面量
    迭代器没有指定格式的字面量。迭代器作为容器,里面的元素只能通过其他序列转换,或者通过生成器生产

    将字符串、列表转换成迭代器,迭代器中的元素就是字符串中的每个字符

    iter1 = iter('hello')
    iter2 = iter(['as',[1],'qw'])
    

    3.获取元素
    (迭代器中的元素只支持查,不支持增删改)
    迭代器是通过next函数获取单个元素,for in 遍历一个一个获取每一个元素
    不管哪种方式获取,已经获取过的元素,在迭代器中就不存在
    a.next
    next(迭代器) --->获取迭代器中最新的数据(最顶层),如果取完了再取就会报:StopIteration错误
    b.for in取迭代器中的元素和next效果一样,元素还是会从迭代器中取出
    print(next(iter1))

    1.什么是生成式
    生成式就是生成器的一种特殊写法

    2.写法
    a.生成器=表达式 for 变量 in 序列 -->让变量去序列中取值,每取一个值就将对应的表达式的值作为生成器的元素

    b.生成器 = (表达式 for 变量 in 序列 if 条件语句)
    def 函数名():
    for 变量 in 序列:
    if 条件语句:
    yield 表达式

    gen1 = (x*2 for x in range(5))
    def func1():
        for x in range(5):
            yield x*2
    
    gen2 = ((value,key) for key,value in {'name':'aa','age':23}.items())
    print(next(gen2))
    

    3.将迭代器和生成器转换成其他列表
    a,list(生成器、迭代器) ---> 转换为列表
    b.[生成式] -->直接将生成对应的生成器转换成列表
    '''
    list1 = list(gen1)
    print(list1)
    练习:交换字典的key和value的位置

    dict1 = {'a':1,'b':2,'c':3}
    result = dict((x,y) for y,x in dict1.items())
    print(result)
    

    相关文章

      网友评论

          本文标题:day11 生成器迭代器

          本文链接:https://www.haomeiwen.com/subject/kpfprqtx.html