gpt4 book ai didi

python - 在循环中应用 `lambda` 和 `map`?

转载 作者:太空宇宙 更新时间:2023-11-04 08:38:31 25 4
gpt4 key购买 nike

我的文件命名为:

'guess-number.py', 'convert-object-to-dict.py'

我要将它们重命名为:

import os
import glob
py_files = glob.glob('*.py')

然后重命名它们:

for file in py_files:
os.rename(file, file.replace('-','_'))

or
des_py_file = [file.replace('-','_') for file in py_file ]
for i, j in zip(py_files, dst_py_files:
os.rename(i,j)

或者,我尝试使用 lambdamap 进行函数式编程

map(lambda i,j:os.rename(i,j),zip(py_files,dst_py_files))
or
map(lambda i: os.rename(i, i.replace('-','_')),py_files)

目录中的文件没有任何变化,同时输出:

<map object at 0x109b237f0>
<map object at 0x109b23d30>

如何用 lambda 做到这一点?

最佳答案

How to do it with lambda?

不要。 map(lambda i,j:os.rename(i,j),zip(py_files,dst_py_files)) 是滥用 map 的副作用,而且,正如你我注意到,在 Python 3 中不起作用,因为 Python 3 的 map 是延迟计算的。

您可以强制使用 list 或等效项来生成一个无用的列表,就像在 Python 2 中一样:

[*map(os.rename, py_files, dst_py_files)]

不要。

您可以使用for 强制对其求值:

for _ in map(os.rename, py_files, dst_py_files):
pass

这有好处,呃​​,。

不过,如果你真的想传递函数,你可以自己制作一个明确的目的来产生副作用:

def for_each(action, *iterables):
for t in zip(*iterables):
action(*t)


for_each(os.rename, py_files, dst_py_files)

关于python - 在循环中应用 `lambda` 和 `map`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46763393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com