python的语法小结之生成器和迭代器
生成器:
首先介绍一下列表生成式:a=[x for x in range(10)] >>>>>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a=[x*2 for x in range(10)] >>>>>>[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
注意:前面的x和后面的x一定要相同
再比方说:
def f(n):
return n**3
a=[f(x) for x in range(10)]
print(a) 所以前面也可以是函数,但是f(x)里面的x一定要和之前的对应上。
>>>>>>[0, 1, 8, 27, 64, 125, 216, 343, 512, 729]
前面所说的是列表生成式,是[],下面要讲的生成器是用的是()。
s=(x*2 for x in range(10))
print(s)
print(s._next_()) 和print(next(s))是等价的,而且后者更常用。输出的是0
只能按顺序一个一个取,不能倒序,也不能跳着取,还不能取得超出范围,会报错(stopiteration)
生成器只能通过next去拿值。
生成器本身就是一个可迭代对象(iterable)
for i in s:
print(i)
生成器一共两种创建方式:
1、(x*2 for x in range (5))
2、yield
def foo():
print("ok")
yield 1
print("ok2")
yield 2
return None #这是默认的
g=foo()
print(g)
for i in foo():
print(i)
>>>>>>ok
1
ok2
2
为什么会这样呢?因为for循环执行的代码就相当于 for i in foo(): while ture: i=next(foo())
其中i 拿到的是yield的返回值,所以,print(i)打印出的才是1和2.for循环里本身就是可以调用next的
还有就是只要有yield就是生成器。return就是普通函数。有几个yield就会有几道菜
def bar():
print("ok1")
count=yield 1
print(count)
yield 2
b=bar()
b.send(None) #第一次send前,如果没有next,那么只能传一个send(none)
ret=b.send("eee")
print(ret)
>>>>>>ok1
eee
2
send 有next的功能,但是比next相比较而言,它还可以改变生成器的值
迭代器:
l=[1,2,3,5]
d=iter(l)
print(d) 其中,l是可迭代对象,iterable。d是迭代器,iterable。
什么是迭代器?
满足两个条件:1、有iter的方法。2、有next的方法
生成器一定是迭代器但迭代器不一定是生成器。 for 循环内部的三件事:
1、调用可迭代对象的iter方法,返回一个迭代器对象
2、不断调用迭代器对象的next方法
3、处理stopiteration 模块
时间模块
import time
print(time.time()) >>>>>>1519734027.6702034 时间戳
time.sleep(3) 不是计算时间的,只是cpu不工作
时间的格式化输出
print(time.strftime("%Y--%m--%d %H:%M:%S",time.localtime())) >>>>>>2018--02--27 20:34:26 random 随机数
print(random.random())
print(random.randint(1,8)) 包括8
print(random,choice("hello")) 选择随机元素
print(random.randrange(1,3)) 不包括3
生成随机密码的代码:
import random
def v_code():
code=""
for i in range(5):
add=random.choice([random.randrange(10),chr(random.randrange(65,91))])
code+=str(add)
print(code)
v_code()
python的语法小结之生成器和迭代器的更多相关文章
- Python之路-python(装饰器、生成器、迭代器、Json & pickle 数据序列化、软件目录结构规范)
装饰器: 首先来认识一下python函数, 定义:本质是函数(功能是装饰其它函数),为其它函数添加附件功能 原则: 1.不能修改被装饰的函数的源代码. 2.不 ...
- python(七)字符串格式化、生成器与迭代器
字符串格式化 Python的字符串格式化有两种方式:百分号方式.format方式 1.百分号的方式 %[(name)][flags][width].[precision]typecode (name) ...
- python初步学习-生成式、生成器、迭代器、装饰器
生成式 列表生成式 字典生成式 集合生成式 嵌套列表生成式 列表生成式 列表生成式是python受欢迎的语法之一,通过一句简洁的语法就可以对一组元素进行过滤,还可以对得到的元素进行转换处理.语法格式为 ...
- python的语法小结
break 与continue的区别: 1.break是直接中断全部循环 2.continue则是在只不执行此次所循环的东西,其它循环依旧执行,比方说只是跳过第4次循环,第5次循环照常进行. \n 表 ...
- python基础-装饰器,生成器和迭代器
学习内容 1.装饰器 2.生成器 3.迭代器 4.软件目录结构规范 一:装饰器(decorator) 1.装饰器定义:本质就是函数,用来装饰其他函数,即为其他函数添加附加功能. 2.装饰器原则:1)不 ...
- python学习——列表生成式,生成器和迭代器
列表生成式 列表生成式,是python内置的非常简单却强大的可以用来创建list的生成式.它可以极大的简化语句. """列表生成式""" # ...
- 『Python』列表生成式、生成器与迭代器
1. 迭代 在 Python中, 迭代是通过 for ... in 来完成的, 而很多语言比如 C 语言, 迭代 list 是通过下标完成的. Python 的 for 循环抽象程度要高于 C 的 f ...
- python语法生成器、迭代器、闭包、装饰器总结
1.生成器 生成器的创建方法: (1)通过列表生成式创建 可以通过将列表生成式的[]改成() eg: # 列表生成式 L = [ x*2 for x in range(5)] # L = [0, 2, ...
- Python基础(冒泡、生成器、迭代器、列表与字典解析)
一.冒泡算法 冒泡算法,给定一组数据,从大到小排序或者从小到大排序,就像气泡一样 原理: 相邻的两个对象相比,大的放到后面,交换位置 交换位置通过a,b=b,a来实现 1.我们可以通过for循环来根 ...
随机推荐
- fsync和fdatasync
在看LevelDB源码的时候,看到PosixWritableFile类的Sync函数用到了fsync和fdatasync两个Linux系统调用来将文件的修改同步到磁盘上,所以粗浅的学习了一下这两个系统 ...
- SpringBoot之配置
回顾 SpringBoot之基础 配置文件 ① 两种全局配置文件(文件名是固定的) 配置文件放在src/main/resources目录或者类路径/config下 application.proper ...
- unittest框架(惨不忍睹低配版)
根据我上个随笔的unittest框架优化得来,虽然对于smtp模块还是有点迷糊,不过还是勉强搭建运行成功了,还是先上代码: #login_test.py import requests class L ...
- java课程之团队开发冲刺1.4
一.总结昨天进度 1.昨天任务全部完成 二.遇到的问题 1.对数据库的使用陌生 2.使用sqlite有些困难 3.对如何解决查询课程问题暂时没有找到好的解决方案 三.今日任务 1.由于周一的课程比较紧 ...
- C语言基础02
1. .so -- shared object,用户层的动态库 ..ko -- kernel object,内核模块,可以在Linux内核起来之后动态的加载和卸载. 2.
- Zabbix监控平台3.2.4(一)搭建部署与概述
一,Zabbix架构 zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.zabbix 能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制 ...
- 链接错误:multiple definition of 'xxx' 问题解决及其原理
内容借鉴 于CSDN炸鸡叔 错因 截图: “multiple definition of 'head' ” “multiple definition of 'tail' ” 解决过程: 1.首先要 ...
- docker制作镜像
使用Dockerfile脚本创建jdk1.8镜像 新建jdk目录:(-p表示需要父目录,不然就会出错) mkdir -p /usr/local/dockerjdk1. 将jdk的压缩文件复制到上面的路 ...
- Java中关于quartz定时任务时间设置
每天凌晨2点 0 0 2 * * ?和每天隔一小时 0 * */1 * * ? 例1:每隔5秒执行一次:*/5 * * * * ? 例2:每隔5分执行一次:0 */5 * * * ?在26分.29分. ...
- django xadmin后台页面实现二级联动
思路 先找到控件id ,这样就可以监听change事件 然后把自己写的js加入xadmin中 添加url和view,接受ajax请求和发送数据 第一步:找到联动上下级的ID 在浏览器中通过F12查看 ...