# 列表生成式
a = [x*2 for x in range(10)] # 这两个变量必须一致
print(a) #列表 元组的高级赋值办法
b,c = ["",6]
print(b) #
print(c) #
 # python的垃圾回收机制
#给变量赋值的时候值的内存地址被变量引用
#如果值的内存地址没有被任何对象引用的话,python就将该内存进行回收释放 #生成器额2种创建方式 #生成器的创建方式一:
a = (x*2 for x in range(10))
#print(a) <generator object <genexpr> at 0x0000000001DEA1B0> 目前没有任何值,只是个迭代器 #生成器的创建方式二:
#在函数内部使用yield关键字创建生成器
#函数本身不是生成器,但是函数的执行就是生成器 如 test() 就是个生成器 def test():
print("ok")
yield 2 #yield后面的值相当于返回值
print("ok2")
yield 5 #生成器中值的遍历next()方法
#生成器可以当成迭代器去使用for方法迭代 for i in a: next(i)
a = test()
#next(a) #这样会执行yield关键字前面的语句,返回值为yield后面跟的值---ok
#next(a) #执行第二遍的时候,指针会跳到yield 2 这里 开始往下执行 后面依次这样,直到遇到return 就没有可迭代的对象了-ok2
#next(a) #没有可迭代的对象会报错! for u in a:
# print(u) #ok 2 ok2 5
print(next(a)) #ok ok2 5 为什么会这样呢? # 生成器的值只能按照顺序一个一个去取,不能随机去取
# 在pyhton 2.0 版本中,使用的变量方式是__next__() #什么是可迭代对象呢?
#对象的内部有__iter__ 方法的都是可迭代对象 #斐波那契函数的实现函数
# 考察你变量的赋值
def fib(max):
n,a,b =0,0,1
while n < max:
print(b)
a,b = b,a+b
n = n+1
 # 如何将一个菲薄纳妾函数转化成一个生成器呢?
# 思路 就是把print的输出地方转化为 yield + 输出值 #肥波纳妾函数 用生成器的实现
# def fib(max):
# n,a,b =0,0,1
# while n < max:
# print(b)
# a,b = b,a+b
# n = n+1
#*************************** def fib(max):
n,a,b =0,0,1
while n < max:
yield b
a,b = b,a+b
n = n+1 x = fib(10) #生成器产生
#实现方式一:
for i in x:
print(i)
#实现方式二:
print(next(x))
print(next(x))
print(next(x))
print(next(x))
print(next(x))
print(next(x))
print(next(x))
print(next(x))
print(next(x))
print(next(x))
 #生成器 之 send() 方法

 def test():
print("OK1") #OK1
count =yield 1 #eee
print(count) #OK
print("OK") #
yield 4 # 4 作为x.send("eee")的返回值 x = test() #生成 生成器对象
# x.send("eee") #首次使用会报错!
# #send()方法首次使用传入参数会报错
# 原因:send穿参数值的前提是需要 在yield 返回1这个值后 也就是在yiled执行之后,才能执行send带参数的值赋值给变量count
# 此时 执行print(count)之后会打印出 send传入的值
# 但是 在执行第二个 yield之后,第二个yield的返回值会再次赋值给 count 所以导致
# print(x.send("eeee")) # 值为2 # 接下来进行测试;
x.send(None) #这样执行相当于 next(x)
q = x.send("eee")
print(q) #执行的结果为 2
 #使用生成器实现伪并发 yield
#通过yield实现在单线程的情况下实现并发运算的效果 
import time
def consumer(name):
print("%s 准备吃包子啦!" %name)
while True:
baozi = yield print("包子[%s]来了,被[%s]吃了!" %(baozi,name)) def producer(name):
c = consumer('A')
c2 = consumer('B')
c.__next__()
c2.__next__()
print("老子开始准备做包子啦!")
for i in range(10):
time.sleep(1)
print("做了2个包子!")
c.send(i)
c2.send(i) producer("alex") # 首先理清楚思路
 # 迭代器
# 生成器一定是迭代器 迭代器不一定是生成器
# 迭代器的调用方法 该方法返回一个迭代器对象
x = [1,23,4,2,8]
x.__iter__() #方式一
iter(x) #方式二 python3 内置方法调用 # 什么事迭代器?
#条件一:有iter()方法
#条件二:有next()方法
# 哪些是可迭代对象呢?
# list tuple,dict string #判断一个对象是否为可迭代对象的方法 使用
l= [1,2]
print(isinstance(l,list)) #判断[1,2] 是否为list对象
print(isinstance(l,Iterable)) #判断是否为可迭代对象
print(isinstance(l,Iterator)) #判断该对象是否为迭代器 # for 循环所做的三件事
# 1.调用可迭代对象的iter()方法 返回一个迭代器或者迭代对象
# 2.调用迭代器的next()方法进行数据的提取
# 3.处理迭代器的异常,比如超过迭代器的处理元素该怎么处理

参考链接:

http://www.cnblogs.com/yuanchenqi/articles/5769491.html

http://www.cnblogs.com/alex3714/articles/5765046.html

python-17的更多相关文章

  1. python 17 内置模块

    目录 1. 序列化模块 1.1 json 模块 1.2 pickle 模块 2. os 模块 3. sys 模块 4. hashlib 加密.摘要 4.1 加密 4.2 加盐 4.3 文件一致性校验 ...

  2. [Optimized Python] 17 - Performance bottle-neck

    前言 对于一门编程语言,没接触到“优化”和“库代码”的源码理解程度,不足以谈“掌握”二字. 本篇的学习笔记,同时也意味着自己终于触及到了Python的junior国际水准.(joke) 要学的东西有很 ...

  3. python 17 异常

    自 http://www.cnblogs.com/BeginMan/p/3171445.html 一.什么是错误,什么是异常,它们两者区别 这里解释如下:个人觉得很通俗易懂 错误是指在执行代码过程中发 ...

  4. [LeetCode][Python]17: Letter Combinations of a Phone Number

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 17: Letter Combinations of a Phone Numb ...

  5. Python 17 web框架&Django

    本节内容 1.html里面的正则表达式 2.web样式简介 3.Django创建工程 Html里的正则表达式 test 用来判断字符串是否符合规定的正则       rep.test('....')  ...

  6. python 17 函数基础(一)

    http://www.cnblogs.com/BeginMan/p/3171977.html 一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/arch ...

  7. python 17篇 unittest单元测试框架

    单元测试:开发程序的人自己测试自己的代码 unittest自动化测试框架 1.单元测试 import unittest def add(a,b): return a+b # 在运行时不要用run un ...

  8. 【Python 17】B分R计算器1.0(数值类型)

    1.案例描述 基础代谢率(BMR):我们安静状态下(通常为静卧状态)消耗的最低热量,人的其他活动都建立在这个基础上. 计算公式: BMR(男) = (13.7*体重kg)+(5.0*身高cm)-(6. ...

  9. python --- 17. 面向对象成员

    面向对象的成员 能写的所有成员 一.变量 1.实例变量 访问时      对象.变量 2.类变量 访问时     类名.变量 注意: 二.方法 1.实例方法 必须有一个参数(self) 调用时    ...

  10. A few things to remember while coding in Python.

    A few things to remember while coding in Python. - 17 May 2012 - UPDATE: There has been much discuss ...

随机推荐

  1. js 模仿jquery 写个简单的小demo

    <div id="div" style="background:red;width:100px;height:300px"> 123123123 & ...

  2. python中MetaClass的一些用法

    元类在很多编程语言中都有这样的概念,我们都知道,类可以创建对象,类本身也是对象,既然是对象,那么它肯定也是被创造出来的,元类就专门用来创造类对象,于是,这就给我们提供了一种操纵或者监听类的能力. 平时 ...

  3. ubuntu安装thrift

    ubuntu环境下安装thrift-0.10.0 1.解压 2.编译安装 ./configure -with-cpp -with-boost -without-python -without-csha ...

  4. js多个(N)个数组的的元素组合排序算法,多维数组的排列组合或多个数组之间的排列组合

    现在有一批手机,其中颜色有['白色','黑色','金色','粉红色']:内存大小有['16G','32G','64G','128G'],版本有['移动','联通','电信'],要求写一个算法,实现[[ ...

  5. win10 快速访问关闭

    1. 右键 --- 选项 2. 选择:此电脑

  6. 8051汇编:EQU指令

    关于EQU汇编指令 EQU是英文单词equal的缩写,因此我们也能对EQU指令有一个初步的认识:做等价替换使用. 在8051汇编语言中,EQU用于定义一个符号常量,其效果不会带来存储空间的占用(这和C ...

  7. python中unicode 和 str相互转化

    python中的str对象其实就是"8-bit string" ,字节字符串,本质上类似java中的byte[]. 而python中的unicode对象应该才是等同于java中的S ...

  8. linux搭建mysql集群

    一.公共配置 请在三个虚拟机上分别配置此处的配置项. 1. 安装虚拟机 虚拟机操作系统安装CentOS 6.5的x86_64版本. 2. 拷贝mysql cluster 下载以下版本的MySQL-Cl ...

  9. dll注入遇到CreateRemoteThread()返回错误代码5

    在进行dll注入的时候,发现触发了CreateRemoteThread()的错误并返回错误代码5,刚开始以为权限不够,用了管理员权限和加了SetPrivilege()函数提权和用NtCreateThr ...

  10. python 写入Excel

     一.安装xlrd模块: 1.mac下打开终端输入命令: pip install XlsxWriter 2.验证安装是否成功: 在mac终端输入 python  进入python环境 然后输入 imp ...