2016-11-21 3 views
0

Я знаю, что константы в Python более конвенции пока я попал в спор с коллегой программист по следующей строке:Конвенция: Сохранение функции функции Python в константе?

FILE = open("file.txt").readlines() 

С FILE позже используются несколько раз, например в a for line in FILE

Мы хотим скопировать как можно лучше. Я считаю, FILE должен никогда не быть объявлен как константа, потому что он полагается на вывод функций open() и readlines(). Однако контраргумент заключается в том, что FILE никогда не изменяется в нашей программе, поэтому ведет себя как константа. Который из них?

Исключения в сторону, не должна ли она быть переменной, то есть записана как переменная в соответствии с соглашениями об именах, поэтому file во всех строчных строках?

+0

Python не имеет констант. Какой случай вы используете для обозначения ваших переменных, абсолютно не имеет отношения к интерпретатору. – jwodder

+1

@jwodder Он явно ссылается на [PEP8] (https://www.python.org/dev/peps/pep-0008/#constants) руководство о константах. Я добавил соответствующий тег. – Barmar

+0

Я не понимаю, почему это не может быть константой. Некоторые хорошо принятые константы будут 'XXX =" foo "+" bar "'. Это также вычисляется, но явно константа. Небольшая разница здесь в том, что список изменчив. Строка не является (но ссылка также может быть сбита) –

ответ

2

Константа - это не просто то, что не меняется в течение жизни программы, это имя для чего-то, чье значение предопределено и вообще не зависит от динамического состояния приложения или среды. Типичные применения для таких вещей, как математические константы, такие как PI, или параметры приложения, такие как NUMBER_OF_PLAYERS.

В вашем примере значение FILE зависит от содержимого файла. Это не предопределенная константа, так как файл может измениться с одного запуска программы на другой.

Другой способ взглянуть на это состоит в том, что, когда вы видите использование константы в программе, вам просто нужно найти ее инициализацию, чтобы узнать, каково ее значение. Но если вы инициализируете константу из файла, вы не можете сказать, каково ее значение.

PEP8 не определяет «постоянный», поэтому вы можете делать все, что захотите, но я думаю, что большинство программистов найдут ваше намеренное использование FILE, чтобы быть запутанным или неидиоматичным. Учтите, что на некоторых языках программирования то, что вы пытаетесь, даже невозможно, - если у них есть явные объявления constant, они требуют, чтобы значение было вычисляемым во время компиляции.

+0

Что делать, если функция является чистой функцией? например, вычислить π до 1000 цифр. – jfs

+1

Я бы запустил его один раз, а затем скопировал результат в литерал в программе. :) – Barmar

+0

Это как больно читаемость, так и делает изменения излишне сложными. – jfs

Смежные вопросы