Стиль Python
Простой вопрос начинающего:
Я создал небольшой python script для переключения между двумя файлами, которые я использую для тестирования.
Мой вопрос: какой хороший стиль в формате python для следующего кода:
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 )
или
shutil.copyfile( remote
if( filecmp.cmp(local, config_file ) )
else local,
config_file )
или
tocopy = remote if( filecmp.cmp( local, config_file ) ) else local
shutil.copyfile( tocopy, config_file )
Или что?
Кроме того, каков предпочтительный способ называть var в python для имен с несколькими словами, это "to_copy", "tocopy", "toCopy", "ToCopy"
Спасибо.
Ответы
Ответ 1
Для условного оператора я бы, вероятно, пошел:
if filecmp.cmp(local, config_file):
shutil.copyfile(remote, config_file)
else:
shutil.copyfile(local, config_file)
В этом случае мало нужно использовать встроенный y if x else z
, так как окружающий код достаточно прост.
Ответ 2
Из Руководство по стилю Python:
Что касается вывода составного выражения:
Составляющие утверждения (несколько операторов в одной строке), как правило, обескуражены.
Да:
if foo == 'blah':
do_blah_thing()
do_one()
do_two()
do_three()
Или для кода, который вы указали, пример Грега является хорошим:
if filecmp.cmp(local, config_file):
shutil.copyfile(remote, config_file)
else:
shutil.copyfile(local, config_file)
Скорее не:
if foo == 'blah': do_blah_thing()
do_one(); do_two(); do_three()
Имена методов и экземпляры переменных
Используйте правила именования функций: в нижнем регистре со словами, разделенными символами подчеркивания, для повышения удобочитаемости.
Обновление: В запросе Oscar также указано, как выглядит его код таким образом.
Ответ 3
Наиболее распространенное имя, которое я видел, - это выделенные слова под индексом to_copy.
Что касается стиля форматирования, я не видел такого соглашения. Я нахожу
source = remote if filecmp.cmp(local, config_file) else local
shutil.copyfile(source, config_file)
чтобы быть наиболее ясным среди ваших вариантов.
И, видя, что все предпочитают разделять, если бы я, по крайней мере, инкапсулировал вызов copyfile, если вы когда-нибудь захотите его изменить:
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)
Ответ 4
Третий вариант выглядит наиболее естественным для меня, хотя использование пробелов в квадратных скобках и лишних круглых скобках противоречит Руководству по стилю Python.
Это руководство также отвечает на вопрос to_copy, но я, вероятно, использовал бы более ясные имена вообще.
Я бы написал его как:
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)
Ответ 5
Вы можете найти это полезным; PEP 8 - Руководство по стилю для кода Python
Ответ 6
Как насчет:
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 )
yikes, это открытое имя открытого экрана выглядит ужасно.