生成器:

  首先介绍一下列表生成式: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的语法小结之生成器和迭代器的更多相关文章

  1. Python之路-python(装饰器、生成器、迭代器、Json & pickle 数据序列化、软件目录结构规范)

    装饰器: 首先来认识一下python函数, 定义:本质是函数(功能是装饰其它函数),为其它函数添加附件功能        原则:        1.不能修改被装饰的函数的源代码.        2.不 ...

  2. python(七)字符串格式化、生成器与迭代器

    字符串格式化 Python的字符串格式化有两种方式:百分号方式.format方式 1.百分号的方式 %[(name)][flags][width].[precision]typecode (name) ...

  3. python初步学习-生成式、生成器、迭代器、装饰器

    生成式 列表生成式 字典生成式 集合生成式 嵌套列表生成式 列表生成式 列表生成式是python受欢迎的语法之一,通过一句简洁的语法就可以对一组元素进行过滤,还可以对得到的元素进行转换处理.语法格式为 ...

  4. python的语法小结

    break 与continue的区别: 1.break是直接中断全部循环 2.continue则是在只不执行此次所循环的东西,其它循环依旧执行,比方说只是跳过第4次循环,第5次循环照常进行. \n 表 ...

  5. python基础-装饰器,生成器和迭代器

    学习内容 1.装饰器 2.生成器 3.迭代器 4.软件目录结构规范 一:装饰器(decorator) 1.装饰器定义:本质就是函数,用来装饰其他函数,即为其他函数添加附加功能. 2.装饰器原则:1)不 ...

  6. python学习——列表生成式,生成器和迭代器

    列表生成式 列表生成式,是python内置的非常简单却强大的可以用来创建list的生成式.它可以极大的简化语句. """列表生成式""" # ...

  7. 『Python』列表生成式、生成器与迭代器

    1. 迭代 在 Python中, 迭代是通过 for ... in 来完成的, 而很多语言比如 C 语言, 迭代 list 是通过下标完成的. Python 的 for 循环抽象程度要高于 C 的 f ...

  8. python语法生成器、迭代器、闭包、装饰器总结

    1.生成器 生成器的创建方法: (1)通过列表生成式创建 可以通过将列表生成式的[]改成() eg: # 列表生成式 L = [ x*2 for x in range(5)] # L = [0, 2, ...

  9. Python基础(冒泡、生成器、迭代器、列表与字典解析)

    一.冒泡算法 冒泡算法,给定一组数据,从大到小排序或者从小到大排序,就像气泡一样 原理:  相邻的两个对象相比,大的放到后面,交换位置 交换位置通过a,b=b,a来实现 1.我们可以通过for循环来根 ...

随机推荐

  1. EF_简单的增删改查

    EF分为三种code_first,model_first,dabase_first这三种模式,网上的例子有好多,但是用了之后感觉实际中都不是这么用的,此处记录写下来日后用的着了可以快速应用,记录如下: ...

  2. 为什么对string调用swap会导致迭代器失效

    一般来说,swap操作将容器内容交换不会导致容器的指针.引用.迭代器失效. 但当容器类型为array和string时除外. 原因在于:SSO  (Short String Optimization 指 ...

  3. urllib、urllib2、urllib3区别和使用

    python3中把urllib和urllib合并为一个库了,urllib对应urllib.request 1.) python 中最早内置拥有的网络请求模块就是 urllib,我们可以看一下 urll ...

  4. Tomcat 启动时 SecureRandom 非常慢解决办法,亲测有效

    1.找到jre—>lib—>security 2.找到      securerandom.source=file:/dev/random 替换成:securerandom.source= ...

  5. Habits of Considerate People

    Habits of Considerate People体贴人的八种习惯哲学家亚瑟·叔本华曾经说过:“蜡之可贵,在于燃烧自己温暖他人,人之可贵,在于屈尊敬贤彬彬有礼”,事实的确如此.善意与体贴能够抚慰 ...

  6. 小白安装openvas总结-原创20181213

    先对该工具进行熟悉: OpenVAS 介绍 1.关于OpenVAS OpenVAS(Open Vulnerability Assessment System)是一套开源的漏洞扫描系统,早期Nessus ...

  7. jquery中的 deferred之 when (三)

    先来看使用案例: var def1 = $.Deferred(); var def2 = $.Deferred(); var def3 = $.Deferred(); var def4 = $.Def ...

  8. soa 和微服务的区别

    soa beased applications are compromised of more loosely coupled componets that use an enterprise ser ...

  9. PhoenixFD插件流体模拟——UI布局【Dynamics】详解

    流体动力学 本文主要讲解Dynamics折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Dynamics 主要内容 Ov ...

  10. linux应用之test命令详细解析

    test命令用法. 功能:检查文件和比较值 1)判断表达式 if test  (表达式为真) if test !表达式为假 test 表达式1 –a 表达式2                  两个表 ...