全桥整流 发表于 2021-9-18 09:25:45

元组的访问疑问

>>> c=os.walk('C:\\Users\\lyl\\AppData\\Local\\Programs\\Python\\Python39\\ccc')
>>> c[:]
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
    c[:]
TypeError: 'generator' object is not subscriptable
>>> c
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
    c
TypeError: 'generator' object is not subscriptable
>>> list(c)
[('C:\\Users\\lyl\\AppData\\Local\\Programs\\Python\\Python39\\ccc', [], ['123.txt', '1234.txt', '234.txt', '39.py', '40.py', '41.py', '42.py', '890.txt', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'python3.dll', 'python39.dll', 'pythonw.exe'])]
>>> c(1)
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
    c(1)
TypeError: 'generator' object is not callable
>>>

为什么无法访问元组里面的元素呢,如果要访问应该如何操作?

wp231957 发表于 2021-9-18 09:30:33

本帖最后由 wp231957 于 2021-9-18 09:31 编辑

生成器不能直接访问
试一下
list(c)

冬雪雪冬 发表于 2021-9-18 09:34:49

错误1:c是生成器,对其索引要先转换为列表或元组
>>> import os
>>> c = os.walk('f:/py/')
>>> d=tuple(c)
>>> d[:]


错误2:c(1),使用小括号,就会把c当作函数或类。所以提示生成器不能当作函数去调用。

全桥整流 发表于 2021-9-18 09:52:25

wp231957 发表于 2021-9-18 09:30
生成器不能直接访问
试一下
list(c)

>>> c=os.walk('C:\\Users\\lyl\\AppData\\Local\\Programs\\Python\\Python39\\ccc')
>>> list(c)
[]
>>> list(c)
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
    list(c)
IndexError: list index out of range
>>> list(c)
Traceback (most recent call last):
File "<pyshell#23>", line 1, in <module>
    list(c)
IndexError: list index out of range
>>> list(c)(2)
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
    list(c)(2)
IndexError: list index out of range
>>>

为什么list(c)有返回值
但是list(c)会报错?

全桥整流 发表于 2021-9-18 09:53:30

冬雪雪冬 发表于 2021-9-18 09:34
错误1:c是生成器,对其索引要先转换为列表或元组




有没有办法让他不要返回生成器?就是直接出现我需要的值

冬雪雪冬 发表于 2021-9-18 10:07:21

全桥整流 发表于 2021-9-18 09:53
有没有办法让他不要返回生成器?就是直接出现我需要的值

增加一步转换成列表或元组

wp231957 发表于 2021-9-18 10:22:23

全桥整流 发表于 2021-9-18 09:52
>>> c=os.walk('C:\%users\\lyl\\AppData\\Local\\Programs\\Python\\Python39\\ccc')
>>> list(c)

先转列表,增设一个变量xx=list(c)
页: [1]
查看完整版本: 元组的访问疑问