Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解python中的变量赋值_Python_Python 2.7 - Fatal编程技术网

理解python中的变量赋值

理解python中的变量赋值,python,python-2.7,Python,Python 2.7,我是noob,正在努力理解Python 对于os.walk文档,它返回一个元组(dirpath、dirname、filename) 只是出于理解,我试着像下面这样使用它 import os from os.path import join, getsize file=[] dir=[] xroot,dir,file = os.walk('C:\Python27\mycode') 但它给我的错误是:xroot,dir,file=os.walk('C:\Python27\mycode')) Val

我是noob,正在努力理解Python

对于os.walk文档,它返回一个元组(dirpath、dirname、filename)

只是出于理解,我试着像下面这样使用它

import os
from os.path import join, getsize
file=[]
dir=[]
xroot,dir,file = os.walk('C:\Python27\mycode')
但它给我的错误是:xroot,dir,file=os.walk('C:\Python27\mycode')) ValueError:需要2个以上的值才能解包


我的问题是,为什么我不能像上面那样分配它,而不是将它作为循环的一部分(大多数示例都使用它)?

您的代码尝试将由
os.walk()
返回的生成器解包为三元组。这很好,但问题是生成器只生成两个项,这两个项不起作用

生成器中的每一项本身都是一个三元组,这就是您的
for
循环在每次迭代中真正解包的内容。更详细的写作方式是:

for three_tuple in os.walk('C:\Python27\mycode'):
    xroot, dir, file = three_tuple
您可能会发现将生成器转换为列表更容易:

>>> pprint.pprint(list(os.walk('.')))
[('.', ['foo'], ['main.py']),
 ('.\\foo', [], ['test.py', 'test.pyc', '__init__.py', '__init__.pyc'])]

如您所见,结果是一个iterable(列表),其中每个元素都是一个三元组,然后可以将其解压到根文件夹、文件夹列表和文件列表中。

您的代码尝试将
os.walk()
返回的生成器解压到三元组中。这很好,但问题是生成器只生成两个项,这两个项不起作用

生成器中的每一项本身都是一个三元组,这就是您的
for
循环在每次迭代中真正解包的内容。更详细的写作方式是:

for three_tuple in os.walk('C:\Python27\mycode'):
    xroot, dir, file = three_tuple
您可能会发现将生成器转换为列表更容易:

>>> pprint.pprint(list(os.walk('.')))
[('.', ['foo'], ['main.py']),
 ('.\\foo', [], ['test.py', 'test.pyc', '__init__.py', '__init__.pyc'])]

如您所见,结果是一个iterable(列表),其中每个元素都是一个三元组,然后可以将其解压到根文件夹、文件夹列表和文件列表中。

os.walk返回一个迭代器。通常要做的是绕圈子

for xroot, dir, file in os.walk('C:\Python27\mycode'):
    ...

但是您也可以使用
xroot,dir,file=next(os.walk('C:\Python27\mycode'))
单步执行os.walk返回一个迭代器。通常要做的是绕圈子

for xroot, dir, file in os.walk('C:\Python27\mycode'):
    ...

但是您也可以使用
xroot,dir,file=next(os.walk('C:\Python27\mycode'))
单步执行操作系统。walk不会返回
根目录,file
。它返回一个生成器对象供程序员循环使用。很可能是因为给定的路径可能有子目录、文件等

>>> import os
>>> xroot,dir,file = os.walk('/tmp/') #this is wrong.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>>> os.walk('/tmp/')
<generator object walk at 0x109e5c820> #generator object returned, use it
>>> for xroot, dir, file in os.walk('/tmp/'):
...     print xroot, dir, file
... 
/tmp/ ['launched-IqEK']
/tmp/launch-IqbUEK [] ['foo']
/tmp/launch-ldsaxE [] ['bar']
>>> 
导入操作系统 >>>xroot,dir,file=os.walk('/tmp/')#这是错误的。 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 ValueError:要解压缩的值太多 >>>os.walk(“/tmp/”) #已返回生成器对象,请使用它 >>>对于os.walk(“/tmp/”)中的xroot、dir文件: ... 打印xroot、dir、文件 ... /tmp/['launched-IqEK'] /tmp/发布IqbUEK[]['foo'] /tmp/启动ldsaxE[]['bar'] >>>
os.walk
不返回
根目录、目录、文件
。它返回一个生成器对象供程序员循环使用。很可能是因为给定的路径可能有子目录、文件等

>>> import os
>>> xroot,dir,file = os.walk('/tmp/') #this is wrong.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>>> os.walk('/tmp/')
<generator object walk at 0x109e5c820> #generator object returned, use it
>>> for xroot, dir, file in os.walk('/tmp/'):
...     print xroot, dir, file
... 
/tmp/ ['launched-IqEK']
/tmp/launch-IqbUEK [] ['foo']
/tmp/launch-ldsaxE [] ['bar']
>>> 
导入操作系统 >>>xroot,dir,file=os.walk('/tmp/')#这是错误的。 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 ValueError:要解压缩的值太多 >>>os.walk(“/tmp/”) #已返回生成器对象,请使用它 >>>对于os.walk(“/tmp/”)中的xroot、dir文件: ... 打印xroot、dir、文件 ... /tmp/['launched-IqEK'] /tmp/发布IqbUEK[]['foo'] /tmp/启动ldsaxE[]['bar'] >>>
目录中有多个文件(从错误消息中看起来像是两个)。当您在循环中使用它时,您将获得目录中每个文件的(xroot、dir、file)值。目录中有多个文件(从错误消息中似乎有两个)。在循环中使用它时,将为目录中的每个文件获取(xroot、dir、file)。生成器上的SO线程:生成器上的SO线程: