美文网首页
chapter5 函数进阶*3

chapter5 函数进阶*3

作者: 木果渣 | 来源:发表于2017-12-19 23:28 被阅读0次

生成器与迭代

##generator
#
L = [x*x for x in range(10)]
g = (x*x for x in range(10))
print(L)
print(g)

print(next(g))

for n in g:
    print(n)

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        print(b)
        a, b = b , a+b
        n += 1
    return 'done'

fib(10)

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b, = b, a+b
        n += 1
    return 'done'

f = fib(10)
print(f)

def odd():
    print('step 1')
    yield 1
    print('step 2')
    yield(3)
    print('step 3')
    yield(5)

o = odd()
next(o)
next(o)
next(o)

##用生成器写杨辉三角
def triangles():
    L = [1]
    while 1:
        yield L
        temp = [1]
        for i in range(len(L)-1):
            temp.append(L[i] + L[i+1])
        temp.append(1)
        L = temp[:]

gen_list = triangles()
print(next(gen_list))
print(next(gen_list))
print(next(gen_list))
print(next(gen_list))
print(next(gen_list))
print(next(gen_list))

n = 0
results = []
for t in triangles():
    print(t)
    results.append(t)
    n += 1
    if n == 10:
        break

print(results)

##更好的写法
def triangles_better():
    L = [1]
    while 1:
        yield L
        L = [L[i]+L[i+1] for i in range(len(L)-1)]
        L.insert(0, 1)
        L.append(1)

def triangles_better_2():
    L = [1]
    while 1:
        yield L
                L.append(0)
        L = [L[i]+L[i-1] for i in range(len(L))]


better_list = triangles_better()
print(next(better_list))
print(next(better_list))
print(next(better_list))
print(next(better_list))
print(next(better_list))
print(next(better_list))
print(next(better_list))


##Iterator
#

from collections import Iterable
print(isinstance([], Iterable))
print(isinstance({}, Iterable))
print(isinstance('abc', Iterable))
print(isinstance((x for x in range(10)), Iterable))

from collections import Iterator
print(isinstance((x for x in range(10)), Iterator))
print(isinstance([], Iterator))
print(isinstance({}, Iterator))
print(isinstance('abc', Iterator))

##生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。

print(isinstance(iter('abc'), Iterator))


L = [1, 2, 3, 4]
I = iter(L)
print(next(I))
print(next(I))
print(next(I))
print(next(I))
##StopIteration
print(next(I))

相关文章

  • chapter5 函数进阶*3

    生成器与迭代

  • 07 C函数

    1、why函数? 2、函数进阶 3、递归函数

  • 表格函数

    1.“如果”函数. 2.“如果”进阶函数. 3.制表 以及表格分化

  • Swift3之函数(二)

    Swift3之函数(一) 进阶部分 1.函数参数 -- 外部参数名 2.下滑线 -- _ 3.函数参数 -- 设置...

  • 12.逻辑函数(IF、AND、Or)

    1.逻辑值True、False 2.基本用法——IF函数,AND函数,OR函数的运用 3.进阶用法——IF函数与A...

  • Kotlin 进阶之路3 控制流与函数

    Kotlin 进阶之路 目录 1.控制流 2.函数 3.初识lambda与高阶函数

  • python 函数进阶

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的...

  • python 函数进阶

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的...

  • Python函数高阶

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的...

  • 17 函数进阶

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的...

网友评论

      本文标题:chapter5 函数进阶*3

      本文链接:https://www.haomeiwen.com/subject/fzlwwxtx.html