python学习day10

一:  list 生成式

#codeing:UTF-8
#__author__:Duke
#date:2018/3/9/009

# list 生成器
a = [x for x in range(10)]
print(a)  #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a = [x*x for x in range(10)]
print(a)  #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

def f(n):
    return n**3
a = [f(x) for x in range(10)]
print(a)  #[0, 1, 8, 27, 64, 125, 216, 343, 512, 729]

二:生成器

生成器共两种创建方法

# 一: 小括号法
a = (x*2 for x in range(10))
print(a)  #a  为 generator(生成器) object
print(next(a))  # == print(a.__next__())
print(next(a))  # == print(a.__next__())
#genator  只能一个一个的接着读
#
# #生成器本来就是一个可迭代对象(iterable)
for i in a:
    print(i)

#二:  关键字法
def fun():
    print("ok1")
    yield  1   #这是next 时的返回值

    print("ok2")
    yield 2
a = fun()  #此时的fun()是一个生成器对象,不在是一个函数,它不会执行函数中的内容,
next(a) # 完成第一个yield  的内容
#
print(next(a))
##   完成第二个yield  的内容  ,先执行next(a)
#    会打印OK2  ,并返回2 ,所以打印的 next(a)就是打印返回值2


#什么是可迭代对象?  对象有 iter  方法的对象就是迭代对象
#常见的有  list  tuple  dict  set
# a = set("a")
# a.__iter__()

def  fib( num ):
    n,a,b = 0,0,1
    while n<=num:
        print(b)
        a,b = b,a+b
        n= n+1

fib(6)


def  fib( num ):
n,a,b = 0,0,1
while n<=num:
#print(b)
yield b #改用装饰器方法
a,b = b,a+b
n= n+1

for i in fib(6):
print(i)

 

posted @ 2018-03-09 22:52  Duke777  阅读(139)  评论(2编辑  收藏  举报