这是一个功能(归功于用户Abbot,用于在另一个问题中提供)
def traverse(ftp):
level = {}
for entry in (path for path in ftp.nlst() if path not in ('.', '..')):
ftp.cwd(entry)
level[entry] = traverse(ftp)
ftp.cwd('..')
return level
Run Code Online (Sandbox Code Playgroud)
这是我不明白的:当python进入函数时,它会创建一个空字典(level).在for循环中,它将目录名称存储为字典中的键.至于那个键的值,python再次进入函数并搜索一个目录,它就变成了该键的值.
但是,级别字典如何记住内部的值?我的意思是,每次python进入函数时都不应该重置/清空吗?
不.该函数的每个"实例"都有自己的副本,level并且各个副本之间没有副作用level.
拿这个文件夹树:
root
`-home
|- lyrae
| |- ftp.py
| `- http.py
`- badp
Run Code Online (Sandbox Code Playgroud)
下面是当你调用(简体)执行流程ftp上root:
ftp(root)创建一个空level字典ftp(root)枚举子文件夹:(home).ftp(root) 选择第一个子文件夹并将目录更改为其中.ftp(root)设置level[home]为ftp当前文件夹中的结果.ftp(home)创建一个空level字典ftp(home)枚举子文件夹:(lyrae, badp).ftp(home) 选择第一个子文件夹并将目录更改为其中.ftp(home)设置level[lyrae]为ftp当前文件夹中的结果.ftp(lyrae)创建一个空level字典ftp(lyrae)枚举子文件夹:().ftp(lyrae)超出子文件夹解析并返回level.ftp(home) 完成任务: levels = {'lyrae': {}}ftp(home) 更改到下一个文件夹.ftp(home)设置level[badp]为ftp当前文件夹中的结果.ftp(badp)创建一个空level字典ftp(badp)枚举子文件夹:().ftp(badp)超出子文件夹解析并返回level.ftp(home) 完成任务: levels = {'lyrae': {}, 'badp': {}}ftp(home)超出子文件夹解析并返回level.ftp(root) 完成任务: levels = {'home': {'lyrae': {}, 'badp': {}}}ftp(root)超出子文件夹解析并返回level.| 归档时间: |
|
| 查看次数: |
335 次 |
| 最近记录: |