美文网首页
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)

相关文章

  • 2019-03-20

    1 迭代器和生成器 迭代器 获取数据:next (迭代器)、for 循环遍历 ,数据来源:转换、生成器 生成器:...

  • yield and Iterator

    Generator(生成器) 生成器是特殊的迭代器,迭代器不一定是生成器。 生成器与迭代器均是可迭代对象。 目前学...

  • 14. Python之迭代器(iterator)和生成器(gen

    1 什么是迭代器 2 为何要有迭代器 3 如何用迭代器 4 生成器 生成器应用案例

  • 第014篇:三大神器之生成器

    Python的三大神器:装饰器、迭代器、生成器 1、生成器 1.1、什么是生成器 生成器就是迭代器的一种;生成器作...

  • ES6 ES7 语法特性与规范

    生成器函数 说生成器之前先讲迭代器,下面就是迭代器的简单范例,迭代器代表一个流程,迭代器的每次next()调用,会...

  • Python基础-16生成器-迭代器

    16.生成器-迭代器     可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象,在Python中提供...

  • 迭代器

    可迭代对象(Iterable): for迭代器(Iterator): for + next生成器属于迭代器。 验...

  • Python :生成器、迭代器、装饰器、递归函数与正则表达式

    Python 第四篇:生成器、迭代器、装饰器、递归函数与正则表达式 Python迭代器和生成器 Python 迭代...

  • Python生成器

    1 生成器概念 生成器是一个特殊的迭代器(迭代器的抽象层级更高)所以,生成器拥有迭代器的特性:1.惰性计算,节省内...

  • 协程,生成器,迭代器

    高频率切换 迭代器 自定义迭代器 生成器 特殊的迭代器

网友评论

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

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