Discuss / Python / 生成器迭代的括号问题

生成器迭代的括号问题

Topic source

Maverickboot

#1 Created at ... [Delete] [Delete and Lock User]

如果要迭代dict L的key 会写成 for i in L :print(i) 但是如果迭代values或者items 会写成for i in L.values() 或者for i,j in L.items() 然后print

我理解L是dict所以可以迭代,但L.values是个函数,返回值是一个dict,所以迭代要加括号,否则函数名迭代不了。

但是看到生成器我不理解了

g = (x * x for x in range(10)) for n in g: ... print(n)

生成器不加括号怎么可以迭代呢?

生成器不是函数吗?见下面我定义的,fib应该只是函数名,fib()才是内容,怎么fib可以迭代fib()迭代不了?这是什么规定呢?被这一堆括号整不明白了,什么时候加什么时候不加啊?

f=fib(8) #fib是我定义的生成器 isinstance(f,Iterable) True isinstance(f(),Iterable) Traceback (most recent call last): File "<pyshell#221>", line 1, in <module> isinstance(f(),Iterable) TypeError: 'generator' object is not callable

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


  • 1

Reply