迭代器/生成器

2018-09-12  本文已影响0人  这是沸羊羊的干爹

Python分析建模,日常问题整理(八)


2018.09.10~2018.09.16


print('-'.join(list(map(str,list(range(0,10)))))) # 短线连接
print('\n'.join(list(map(str,list(range(0,10)))))) # 提行连接
print('\n'.join([' '.join(['%sx%s=%-2s' % (y,x,x*y) 
       for y in range(1,x+1)]) for x in range(1,13)]))  ##13*13乘法表生成代码
# 迭代完列表中的数据时返回nothing
iterate_ = iter([1,2,3,4,5,6])
a = 6
while a<10:
    a +=1
    print(next(iterate_,'nothing'))

迭代器只能使用一次,用完了需要重新定义才能开始。

generator_ = (x*x for x in range(5)) #generator_ 的数据类型是generator
for i in generator_ :
    print(i)
def createGenerator():
    for i in range(3):
        yield i*2
mygenerator = createGenerator()
# mygenerator 只能使用一次,迭代完了就不能用了,不过可以通过调用createGenerator再生成一个生成器。
for i in mygenerator:
    print(i)

数据量少的时候或者一般数据分析场景可能不需要用,数据量多需考虑内存或者返回一些值时可能会用到。
generator function产生的generator与普通的function区别:
1)function 每次都是从第一行开始运行,generator从上一次yield开始的地方运行
2)function 调用一次返回一个(一组)值,generator可以多次返回
3)function 可以被无数次重复调用,一个generator实例在yield最后一个值 或者return之后就不能继续调用了

能将复杂的代码用一行搞定

python one online
def function能实现的简单函数lambda也可以实现。

def f(string):
     for char in string:
        if char != 'a' and char != 'A':
            return False
     return True

等价于
f = lambda string:True in [char in 'Aa' for char in string]
应用时:
f(['S','E','C'])
等于
(lambda string: True in [char in 'Aa' for char in string])(['S','E','C'])

上一篇 下一篇

猜你喜欢

热点阅读