如果要迭代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!')
Sign in to make a reply
Maverickboot
如果要迭代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,所以迭代要加括号,否则函数名迭代不了。
但是看到生成器我不理解了
生成器不加括号怎么可以迭代呢?
生成器不是函数吗?见下面我定义的,fib应该只是函数名,fib()才是内容,怎么fib可以迭代fib()迭代不了?这是什么规定呢?被这一堆括号整不明白了,什么时候加什么时候不加啊?
def fib(max): a,b,n=0,1,0 while n<max: yield b a,b=b,a+b n+=1 print('done!')