#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2017/10/17 21:46
# @Author : lijunjiang
# @File : test.py """
列表生成式 一个用来生成列表的特定语法形式的表达式。可以对一组元素进行过滤或得到对列表元素进行处理后得到的结果
可以快速的根据已存在的可迭代对象推导出一个新的list 语法格式:
[exp for val in collection if condition]
执行过程:
先对传入的列表进行for循环得到将符合条件的元素再进行if判断返回给exp
执行exp表达式,最后将处理后的结果以列表的形式返回一个列表 """
tuple_test = [x*x for x in xrange(10) if x*x%2 == 0]
print(type(tuple_test))
print(tuple_test)
# 执行结果:
# <type 'list'>
# [0, 4, 16, 36, 64]
# 等价于
tuple_test1 = []
for i in xrange(10):
if i*i%2 == 0:
tuple_test1.append(i)
print(type(tuple_test1))
print(tuple_test1)
# # 执行结果:
# <type 'list'>
# [0, 2, 4, 6, 8] """
生成器
在Python中,这种一边循环一边计算的机制,称为生成器
生成器是按照某种算法不断生成新的数据,直到满足某一个指定的条件结束
每次只生成一个元素,不必创建完整的list,从而节省大量的空间 构造生成器的两种方式: 1、使用类似列表生成式的方式生成 (2*n + 1 for n in range(3, 11)) 将生成式的[],换为()
2、使用包含yield的函数来生成 如果计算过程比较简单,可以直接把列表生成式改成generator;
但是,如果计算过程比较复杂,就只能通过包含yield的函数来构造generator。
""" # 使用类似于列表生成式的方式来构造生成器
print('使用类似于列表生成式的方式来构造生成器')
print('generatot = (x*x for x in xrange(10) if x*x%2 == 0)')
generatot = (x*x for x in xrange(10) if x*x%2 == 0)
print(type(generatot))
print(generatot)
for i in generatot:
print(i) print('使用包含yield的函数构造生成器') def func1():
for i in xrange(10):
if i*i%2 == 0:
yield i*i
generatot1 = func1()
print(type(generatot1))
print(generatot1)
for i in generatot1:
print(i)
# 执行结果:
# 使用类似于列表生成式的方式来构造生成器
# generatot = (x*x for x in xrange(10) if x*x%2 == 0)
# <type 'generator'>
# <generator object <genexpr> at 0x0000000002BA1480>
# 0
# 4
# 16
# 36
# 64
# 使用包含yield的函数构造生成器
# <type 'generator'>
# <generator object func1 at 0x0000000002C2AF78>
# 0
# 4
# 16
# 36
# 64
"""
生成式和生成器的区别:
生成式直接返回了表达式的结果列表,
生成器返回的是一个对象,该对象包含了对表达式结果的计算引用, 通过循环可以直接输出
生成器不会一次性列出所有的数据,当你用到的时候,在列出来,更加节约内存的使用率。
""" """
可迭代对象(Iterable)
即可直接用于for循环的对象统称为可迭代对象(Iterable)。
类型有:list、tuple、dict、set、str、生成器
可以使用isinstance()来判断一个对象是否是Iterable对象 迭代器(Iterator)
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator Python中的Iterator对象表示的是一个数据流,
Iterator可以被next()函数调用被不断返回下一个数据,直到没有数据可以返回时抛出StopIteration异常错误。
可以把这个数据流看做一个有序序列,但我们无法提前知道这个序列的长度。
同时,Iterator的计算是惰性的,只有通过next()函数时才会计算并返回下一个数据
http://www.cnblogs.com/yyds/p/6281453.html
"""
# 实现99乘法表 def func3():
for i in xrange(1, 10):
for j in xrange(1, i+1):
print('{0}*{1}={2}'.format(j, i, i*j)),
print('\n')
func3() #执行结果:
# 1*1=1
#
# 1*2=2 2*2=4
#
# 1*3=3 2*3=6 3*3=9
#
# 1*4=4 2*4=8 3*4=12 4*4=16
#
# 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
#
# 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
#
# 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
#
# 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
#
# 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

最新文章

  1. java获取到机器IP地址及MAC码
  2. MVC项目创建与项目结构介绍
  3. HTML5-WebSocket技术学习(1)
  4. 在Xcode6.1.1模拟器中点击UITextView不出现软键盘?
  5. 【shell】case语句
  6. HDU 2295 Radar dancing links 重复覆盖
  7. 2013第49周三IE9文档模式
  8. Linux学习之nfs安装配置
  9. word模板导出的几种方式:第一种:占位符替换模板导出(只适用于word中含有表格形式的)
  10. post推送消息时的乱码
  11. git commit之后,想撤销commit
  12. mac修改本机mysql的root密码
  13. Linux安装配置NFS教程(CentOS 6.5)
  14. POJ1064--Cable master(Binary Search)
  15. vcpkg-微软开发的VC++打包工具
  16. http realtime response 基于http的实时响应方式的演进
  17. SQL Server 数据库存储过程实例
  18. 判断大小端的方法(java和c++)
  19. shell中的多进程【并发】(转)
  20. 收集前端UI框架 持续更新中....

热门文章

  1. 第8课 Thinkphp 5 update判断修改成功与失败 Thinkphp5商城第四季
  2. CodeForces 651B
  3. 经典dfs(depth-first search)
  4. du 与df 统计系统磁盘不一致原因与解决方法
  5. 从头开始学习数据库及ADO.NET——竹子整理
  6. (JAVA指针),对象引用问题
  7. 有三个线程T1 T2 T3,如何保证他们按顺序执行
  8. #2 create and populate a database &amp;&amp; realistic and practical applications (PART 2)
  9. 如何在Linux下使用Rsync
  10. virsh命令管理虚拟机