Day 17-1 生成器

附篇文章:

http://python.jobbole.com/87805/

一、列表生成器:

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**2

a = [f(x) for x in range(10)]

print(a)
 
 

输出结果:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

for前面要操作的变量必须跟in前面要遍历的变量一样


二、一个额外的知识点:

t = [1,2]
a,b = t
print(a)
print(b)
t = [1,2,3]
a,b,c = t
print(a)
print(b)
print(c)

这里要复制的变量个数 必须跟等号后面提供的元素个数相同

三、可迭代对象:

给定一个list或者tuple,通过for循环来遍历这个list或者tuple、这种遍历就是迭代(iteration)。只要是可迭代的对象都可以进行迭代,

即可迭代对象都可以用for循环遍历

有_iter()_方法的对象都是可迭代对象,该方法会返回一个对象,这个对象就是迭代器,迭代器会记录其所属可迭代对象的状态,就是迭代到哪了

看例子

t = [1,2]
a = t.__iter__()

print(next(a))

next()方法是Python内置方法,用于操作迭代器,该句执行后打印1

如果再执行一次

t = [1,2]
a = t.__iter__()
print(next(a))
print(next(a))
会返回1和2

四、生成器:

可以这样做个类比,可迭代对象就是十盘菜,已经做好了,随时可以拿来吃,即数据全体已经保存在内存中

生成器就是一个厨师,你要吃那道菜,他给你现场做

a = (x for x in range(10))
print(a)

<generator object <genexpr> at 0x00000000009FCBA0>

a就是生成器,生成器操作跟迭代器一样,通过调用next内置方法

a = (x for x in range(10))
print(next(a))
print(next(a))


打印结果

0

1

生成器也是一个可迭代对象,可以调用for进行遍历

a = (x for x in range(10))

for i in a:
    print(i)

还有一种生成器对象是函数形式

def foo():
    print("ok1")
    yield 1
    print("ok2")
    yield 2

g = foo()
print(g)

<generator object foo at 0x000000000067CBA0>

此时g就是一个生成器对象,只要函数内部有yield,这个函数名+括号就是生成器对象


def foo():
    print("ok1")
    yield 1
    print("ok2")
    yield 2

g = foo()

print(next(g))
 
 

输出结果:

ok1

1

def foo():
    print("ok1")
    yield 1
    print("ok2")
    yield 2

g = foo()

print(next(g))
print(next(g))


输出结果:

ok1
1
ok2
2


六、再插入一个小知识点:

a = 1
b = 2
a,b = b,a+b
print(a)
print(b)

a,b = b,a+b

这句右边是同时执行的

所以输出结果是

2
3

猜你喜欢

转载自blog.csdn.net/qq_36428237/article/details/80339231