Python style

Python style

简单初学者问题:

我已经创建了一个小的python脚本来在我用于测试的两个文件之间切换。

我的问题是,对于以下代码,什么是好的Python格式样式:

1
2
3
4
5
6
7
8
import filecmp
import shutil

local ="local.txt"
remote ="remote.txt"
config_file ="C:\some\path\file.txt"

shutil.copyfile( remote if( filecmp.cmp(local, config_file ) ) else local, config_file  )

1
2
3
4
shutil.copyfile( remote
                     if( filecmp.cmp(local, config_file ) )
                     else local,
                 config_file  )

1
2
tocopy = remote if( filecmp.cmp( local, config_file ) ) else local
shutil.copyfile( tocopy, config_file )

或者什么?

另外,在python中为许多单词命名var的首选方法是"to-copy"、"to copy"、"to copy"、"to copy"、"to copy"

谢谢。


对于条件语句,我可能会使用:

1
2
3
4
if filecmp.cmp(local, config_file):
    shutil.copyfile(remote, config_file)
else:
    shutil.copyfile(local, config_file)

在这种情况下,几乎不需要使用内联y if x else z,因为周围的代码足够简单。


从python样式指南:

关于列出复合表达式:

通常不鼓励使用复合语句(同一行上有多个语句)。

对:

1
2
3
4
5
if foo == 'blah':
    do_blah_thing()
do_one()
do_two()
do_three()

或者对于您提供的代码,Greg的例子是一个很好的例子:

1
2
3
4
if filecmp.cmp(local, config_file):
    shutil.copyfile(remote, config_file)
else:
    shutil.copyfile(local, config_file)

而不是:

1
2
if foo == 'blah': do_blah_thing()
do_one(); do_two(); do_three()

方法名和实例变量

使用函数命名规则:小写,根据需要用下划线分隔单词,以提高可读性。

更新:根据奥斯卡的要求,还列出了他的代码看起来如何。


第三个选项在我看来是最自然的,尽管您在侧括号和多余的括号中使用空格与Python样式指南相矛盾。

这本指南也回答了这个问题,但我可能会使用更清楚的名字。

我写的是:

1
2
3
4
5
6
7
8
9
10
import filecmp
import shutil

local ="local.txt"
remote ="remote.txt"

destination = r"C:\some\path\file.txt"
source = remote if filecmp.cmp(local, destination) else local

shutil.copyfile(source, destination)


我见过的最常见的命名方法是在代码分隔的单词下面进行复制。

至于格式样式,我没有看到这样的协议。我发现

1
2
3
source = remote if filecmp.cmp(local, config_file) else local

shutil.copyfile(source, config_file)

在你的选择中最清楚。

既然每个人都喜欢拆分,至少我会封装copyfile调用,以防有一天你想更改它:

1
2
3
4
5
6
7
def copy_to(source, destination):
    shutil.copyfile(source,destination)

if filecmp.cmp(local, config_file):
    copy_to(remote, config_file)
else:
    copy_to(local, config_file)


您可能会发现这很有用;pep 8——Python代码的样式指南


如何:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import filecmp
import shutil

local ="local.txt"
remote ="remote.txt"
config_file ="C:\some\path\file.txt"


if filecmp.cmp( local, config_file):
    to_copy = remote
else:
    to_copy = local


shutil.copyfile( to_copy, config_file  )

哎呀,这个打开的ID用户名看起来很糟糕。