我有文件命名为:
'guess-number.py', 'convert-object-to-dict.py'
Run Code Online (Sandbox Code Playgroud)
我将它们重命名为:
import os
import glob
py_files = glob.glob('*.py')
Run Code Online (Sandbox Code Playgroud)
然后重命名它们:
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)
Run Code Online (Sandbox Code Playgroud)
或者,我尝试用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)
Run Code Online (Sandbox Code Playgroud)
Nothings发生在目录中的文件中,而输出:
<map object at 0x109b237f0>
<map object at 0x109b23d30>
Run Code Online (Sandbox Code Playgroud)
怎么做lambda?
怎么做
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)]
Run Code Online (Sandbox Code Playgroud)
别.
您可以强制进行评估for:
for _ in map(os.rename, py_files, dst_py_files):
pass
Run Code Online (Sandbox Code Playgroud)
这有呃的优势.
但是,如果您真的想要传递函数,那么您可以创建自己的产生副作用的明确目的:
def for_each(action, *iterables):
for t in zip(*iterables):
action(*t)
for_each(os.rename, py_files, dst_py_files)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |