Skip to content

Latest commit

 

History

History
131 lines (97 loc) · 3.68 KB

RECOMMENDATIONS.md

File metadata and controls

131 lines (97 loc) · 3.68 KB

PEP 8

Соблюдайте PEP8. Обратите внимание на то, где надо ставить пробелы, а где они не нужны.

Spaces are the preferred indentation method.

Tabs should be used solely to remain consistent with code that is already indented with tabs.

Работа с файлами

Всегда используйте конструкцию

with open('file.txt') as f:
    do_something()

Это столько же символов, как и пара open/close, но намного надёжнее, так как код

f = open('file.txt')
do_something()
f.close()

не закроет файл, если do_something кинет исключение!

Старайтесь минимизировать работу внутри with блока.

Хорошо

result = do_something_complicated()
with open('file.txt') as f:
    print_result()

Плохо

with open('file.txt') as f:
    result = do_something_complicated()
    print_result()

Разделяйте вычисления и ввод-вывод. Лучше использовать две функции, одну для нахождения ответа, другую для его печати, чем использовать одну функцию, которая и считает, и печатает.

Проверка коллекций на пустоту

Чтобы проверить коллекцию или строку(list, dict, set, queue...: всё у чего можно спросить длину) на пустоту, пишите так:

if my_collection:
    # not empty
else:
    # empty

Не нужно сравнивать длину с нулём. Подробности в документации: https://docs.python.org/3.4/library/stdtypes.html#truth-value-testing.

Структура скрипта

Часто приходится писать на питоне маленький скрипт из одного файла, например для решения домашек. В идеальном мире он выглядит так.

#!/usr/bin/env python3 (http://stackoverflow.com/questions/2429511/)
import foo
import bar

def quux():
    ...

def spam():
    ...

def main():
    read input
    use defined functions to the get answer
    write output

if __name__ == '__main__':
    main()

Но может выглядеть и так.

import foo
import bar

def quxx():
    ...

def spam():
    ...

read input
use defined functions to get the answer
write output
  • импорты всегда в самом верху
  • все функции следом за импортами, без кусков кода между ними
  • в самом низу файла код, который собственно запускается
  • как можно меньше глобальных переменных(допускаются глобальные константы)
  • функции либо только производят вычисления, либо только совершают IO

Чтение строки из двух чисел

Вместо

xy = [int(i) for i in sys.stdin.read().split()]
x = xy[0]
y = xy[1]

лучше писать

x, y = [int(i) for i in sys.stdin.read().split()]

по двум причинам.

  • короче и понятнее
  • если вдруг в строке окажется три числа, то это не останется незамеченным