Стиль Python - PullRequest
       21

Стиль Python

3 голосов
/ 01 декабря 2008

Простой вопрос для начинающих:

Я создал небольшой скрипт на python для переключения между двумя файлами, которые я использую для тестирования.

Мой вопрос в том, что является хорошим стилем формата 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"

Спасибо.

Ответы [ 6 ]

17 голосов
/ 01 декабря 2008

Для условного утверждения я бы, вероятно, пошел с:

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

В этом случае нет необходимости использовать встроенный y if x else z, поскольку окружающий код достаточно прост.

6 голосов
/ 01 декабря 2008

Из Руководства по стилю 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()

Имена методов и переменные экземпляра

При необходимости используйте правила именования функций: строчные буквы со словами, разделенными подчеркиванием, для улучшения читаемости.

Обновление: По запросу Оскара также указано, как его код будет выглядеть таким образом.

4 голосов
/ 01 декабря 2008

Третий вариант выглядит наиболее естественным для меня, хотя использование пробелов в боковых и лишних скобках противоречит Руководству по стилю 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)
4 голосов
/ 01 декабря 2008

Наиболее распространенные имена, которые я видел, это слова, разделенные нижним кодом, 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)
1 голос
/ 02 декабря 2008

Вы можете найти это полезным; PEP 8 - Руководство по стилю для кода Python

0 голосов
/ 01 декабря 2008

А как же:

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, это имя с открытым идентификатором выглядит ужасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...