在Python中,如何将这三行代码变为一行代码?

4 投票
7 回答
1907 浏览
提问于 2025-04-16 07:27

这是代码

from sys import argv
script,from_file, to_file = argv
open(to_file,'w').write(open(from_file).read())

我刚开始学Python,现在正在看《艰难的Python学习》这本书。在一个额外的练习中,书的作者说他能把代码写成一行,我现在把它缩短到3行,但我遇到瓶颈了。

能帮帮我吗?

哦,对了,这段代码是用来把一个文件的内容复制到另一个文件里的,或者说它本来是这个意思。这是我的目标。

7 个回答

3

你需要知道两件事:

1) 你可以在同一行写多个Python语句,只需要用分号把它们分开。

2) 你不需要把命令行参数放到单独的变量里才能使用它们。

6

你可以用分号把导入语句放在同一行上。然后可以直接引用argv里的项目,而不是使用变量。

from sys import argv; open(argv[2],'w').write(open(argv[1]).read())
9

其实可以把这个做成一个表达式,也就是说不需要分号:

__import__('shutil').copy(__import__('sys').argv[1], __import__('sys').argv[2])

或者

open(__import__('sys').argv[2], "w").write(open(__import__('sys').argv[1]).read())

当然,正常人不会觉得这个比你的示例代码更好。我唯一会改的就是,没有必要把文件名赋值给临时变量:

from sys import argv
open(argv[1],'w').write(open(argv[2]).read())

用更符合Python风格的写法可以是:

import sys
with open(sys.argv[1]) as src, open(sys.argv[2]) as dest:
    for line in src:
        dest.write(line)

然后你可以开始使用 argparse 来让命令行读取变得更强大...

撰写回答