武道之路-炼体期六重天(年已过,恢复更新)

生成器:调用的时候才生成的数据(惰性计算,协程:保留上次进入的状态,每次程序进入,相当于调用上一次的状态,异步),单线程下的并发效果(不同角色间切换)。

(3.x)range(),列表生成式 [i*i for i in range(20)], 

文件读取:

for line in f: (这里f是文件句柄)

  print(line)

记住重要的方法:__next__(计算下一个状态值),send(value)(把值传给生成器的yeild)

例如(斐波那契数列):

def seq(num):

  #计算几位斐波那契数列

  count,x,y=0,0,1

  while count<num:

    yield y #想把什么放入生成器

    x,y=y,x+y

    count=count+1

  return 'end'

g=seq(10)

g.__next__()->1

g.__next__()->1

g.__next__()->2

...

超过num数字会抛出异常

捕获异常:

try:

  #程序段

except StopIteration(异常类型,这里表示没有更多值了):

  print('error')

  break

单线程下的并发效果(异步):

import time

def employee(name):

  print('%s 已经准备工作'%name)

  while True:

    work=yield

    print('%s 员工已经完成老板下发的%s份工作 '%(name,work))

def boss(name):

  wang=employee('小王')

  zhang=employee('小张')

  wang.__next__() #相当于把函数变成生成器 停在yield(执行到这里)

  zhang.__next__() 

  print('%s 准备去接单了'%name)

  for i in range(10):

    print('已经接到 %d 份单子'%i)

    wang.send(i)#把值传给yield

    zhang.send(i)

    time.sleep(1)#隔一秒

boss('大哥')#调用,boss 接单,员工完成工作同时进行!(不熟悉的自己设断点调试过程)

迭代器(Iterator):可被__next__调用并不断返回下一个值的对象,直到抛出异常。生成器(generator),range(), f(文件句柄),[i*5 for i in range(10)],for循环(底层)

可迭代对象(Iterable):可直接作于for循环的对象,list tuple,dict,set,str(可通过Iter()转成迭代器), 带yield的function,generator

from collections inport Iterable(Iterator) 先引入

isinstance(对象,Iterable(Iterator)) 判断是否是可迭代对象(迭代器)

一些内置函数:

abs() 求绝对值

bool()判断真假

all()检测可迭代对象里的元素的值有假即是假

any()检测可迭代对象里的元素的值有真即是真

bin()转二进制-》b'.....'

bytearray('值',encoding='编码'),二进制可变数组,bytes不可变

callable() 是否可调用,函数,类---》()

chr 返回ASCII值对应的字符,ord 与之相反

原文地址:https://www.cnblogs.com/wh-alan/p/8477318.html