【发布时间】:2020-11-05 00:48:33
【问题描述】:
我做了一个循环,它给了我很多文件路径(在一个列表中)。这些文件路径被分配给循环内名为 all_file_paths 的变量。
现在我打算用那个变量做很多代码,所以为了保持正确,我想把这个变量放在循环之外,并进一步使用它。因为如果我继续在那个循环中工作,循环会变得很大,事情可能会变得混乱。但正如您可能已经知道的那样,一旦我将变量置于循环之外,我就不再使用分配给该变量的相同内容。我只是得到一个空列表:(
将变量带出循环并像在循环内部一样使用它们是正确的方法吗?
这是我的代码示例,我想知道他们是否有技巧,这样我就可以为更大的脚本做同样的事情。谢谢。
source = r'c:\data\JS\Desktop\MyFolder'
for subdir in os.listdir(source):
subdir_path = os.path.join(source, subdir)
# print(subdir_path)
all_file_paths = [os.path.join(subdir_path, file) for file in os.listdir(subdir_path)]
all_file_paths = [p for p in all_file_paths if os.path.isfile(p)]
print(all_file_paths) #<----- when I print this, I get what I need.
print(all_file_paths) #<-----when I print this I get an empty list.
【问题讨论】:
-
即使在循环之外,您也应该在变量中获得相同的值。唯一的问题可能是如果您在函数内部运行
for-loop 并尝试在函数外部使用变量,因为在函数内部它将创建与外部变量无关的局部变量。您应该在函数中使用return all_file_paths并运行all_file_paths = function()- 所以问题与for-loop 无关,而是与function -
all_file_paths对于循环的每次迭代都会有一个不同的值。如果您在循环之后检查它,它将具有在循环的最终迭代期间具有的任何值;以前的所有值都消失了。您要么需要在循环内对这个变量做所有你需要做的事情,要么将它附加到一个列表中,以便在循环后获得所有可用的值。 -
@furas。所以你是说我必须发挥它的作用?但同样的问题仍然存在。因为我不能在函数外使用变量......
-
@jasonharper 将其附加在循环内部还是外部?
-
如果您问这个问题,我认为您不理解我的评论。循环内部是唯一存在分配给
all_file_paths的所有各种值的地方。在循环之外,只有其中一个值仍然存在。