我的文件命名为:
'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)
或者,我尝试使用 lambda
和 map
进行函数式编程
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/