python入门之生成器与迭代器

'''
---列表生成器:
a = []
for i in range(10):
    a.append(i*2)
print(a)

--------生成器----
a =(i*2 for i in range(10))
for i in a:
    print(i)

生成器 只有在调用时才会生成相应的数据
生成器只记录当前的位置,只有一个__next__()方法
'''

'''
#著名的斐波那契数列:除第一个数和第二个数外,任意一个数都可由前两个数相加得到
#1,1,2,3,5,8,13,21,34,56........

def fib(max): #10
    n, a, b = 0, 0, 1
    while n < max: #n<10
        #print(b)
        yield b #yield保存了函数的中段状态
        a, b = b, a + b
        #a = b     a =1, b=2, a=b , a=2,
        # b = a +b b = 2+2 = 4
        n = n + 1
    return '---done---'

#f= fib(10)
g = fib(6)

#-----抓取异常
while True:
    try:
        x = next(g)
        print('g:', x)
    except StopIteration as e:
        print('Generator return value:', e.value)
        break
#print("---------dddd")
# print(f.__next__())
# print("======")
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# print(f.__next__())
print("====start loop======")
#for i in f:
#    print(i)
'''
"""
#----------通过yield实现单线程并发功能--------------

import time
def consumer(name):
    print("%s 准备吃包子啦!" %name)
    while True:
       baozi = yield

       print("包子[%s]来了,被[%s]吃了!" %(baozi,name))

c = consumer("Zhuxianjun")
c.__next__()

# b1= "韭菜馅"
# c.send(b1)
# c.__next__()

def producer(name):
    c = consumer('zhuxianjun 1号')
    c2 = consumer('zhuxianjun 2号')
    c.__next__()
    c2.__next__()
    print("开始准备做包子啦!")
    for i in range(8):
        time.sleep(1)
        print("做了1个包子,分两半!")
        c.send(i)
        c2.send(i)

producer("sun")
print("zhuxianjun 还没吃饱")

"""


#可直接作用于for循环的对象称为可迭代对象:Iterable
# 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
#集合数据类型如:list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象


#--------------内置函数------------------

print(all([1,-5,1]))
print(any([1,0,1]))

print(ascii([1,2,"啦啦啦"]))
#print(bool(0,1,2))

a = bytes("abcde",encoding="utf-8")
b = bytearray("abcde",encoding="utf-8")
print(a.capitalize(),a)
print(b[0])

print(callable([0]))



def sayhi(n):
    print(n)
sayhi(3)

calc = lambda n:print(n)
calc(5)

res = map(lambda n:n**n,range(10))
for i in res:
    print(i)

a = frozenset([1,4,333,666,8,0,1111])
print(a)

print(globals())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值