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) |
在这种情况下,几乎不需要使用内联
从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用户名看起来很糟糕。