LINUX.ORG.RU

В питоне не существует констант. Есть только соглашение именовать переменные ТАКИМ_ОБРАЗОМ, что означает, что менять их значение не следует.

Kilte ★★★★★
()
Ответ на: комментарий от zamazan4ik

нормально, пока кто-то ненормальный не надумает константу записать.

хотя если сильно хочется - константу можно реализовать функцией, возвращающей значение.

NiTr0 ★★★★★
()

Мне норм. Накостылять можно что-то. Например, если нужно сделать поле класса неизменяемым, то можно написать дескриптор для этого. В случае с атрибутами модуля, не думаю. Да и зачем? За все время, что я пишу на питоне, у меня не было реальной необходимости в этом.

Kilte ★★★★★
()
Ответ на: комментарий от zamazan4ik

Можешь что-то такое накостылять http://code.activestate.com/recipes/65207-constants-in-python/?in=user-97991

Но зачем? Есть соглашение что ВОТ_ТАКИЕ_ПЕРЕМЕННЫЕ - константы и их менять в коде не надо. Если кому-то очень захочется изменить, то как ты не костыляй - будут способы это сделать.

pawnhearts ★★★★★
()
Ответ на: комментарий от zamazan4ik

мне нужна константа:) Как это сделать? Переменная, которую раз обьявил и её никто не может изменить

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

Объясни, зачем тебе до зарезу надо, чтобы это была константа?

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

эхх. Пытаюсь понять, как защититься от потенциального говнокодинга. А то неприятно как-то, что если можно поменять константу, а потом код ниже работать не будет. а мне ищи

zamazan4ik ★★
() автор топика
Ответ на: комментарий от zamazan4ik

как защититься от потенциального говнокодинга

Не подпускать говнокодеров к своему проекту? Ну или делать review того, что они делают.

pawnhearts ★★★★★
()
Ответ на: комментарий от zamazan4ik

Ну, ты труп страуса прям заморочился, нафига такие сложности.

pon4ik ★★★★★
()
Ответ на: комментарий от zamazan4ik

Кроме того что сказали выше про ревью и все такое: задействуйте тестирование, например, через библиотеку nose, pylint для статического анализа кода.

pylin ★★★★★
()

всем спасибо, тема закрыта.

Вывод : констант нет, говнокодерам бой, за здравствует ревью, стат. анализ кода и плётки

zamazan4ik ★★
() автор топика
Ответ на: комментарий от zamazan4ik

Советую ознакомиться с PEP 0008 перед тем как совершать разные телодвижения.

Ltm
()
Ответ на: комментарий от pawnhearts

Не подпускать говнокодеров к своему проекту? Ну или делать review того, что они делают.

вероятно, предполагается, что источником говнокода станет сам ОП

MyTrooName ★★★★★
()

между прочим, итог всех тредов про фичи в питоне заканчивается так: это не нужно.

Не удивительно что он так популярен у молодёжи :D

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от zamazan4ik

Пытаюсь понять, как защититься от потенциального говнокодинга.

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

mashina ★★★★★
()
Ответ на: комментарий от zamazan4ik

ну а если имя функции подменить? то есть мы фактически поменяем константу

А чем в этом случае поможет полноприводная константа?

KennyMinigun ★★★★★
()
Ответ на: комментарий от mashina

да не, я на питон не хочу. Что-то не нравится он мне.

zamazan4ik ★★
() автор топика
Ответ на: комментарий от KennyMinigun

ну хотя бы тем, что в тех же плюсах, которые я пытаюсь осилить, если я объявил const int x = 5;то она так и будет константой. Поменять её сложнее : надо поиграться с const_cast и подменить значение. Но это сложнее сделать ИМХО, и к тому же есть шанс неплохой, что она просто не поменяется, ибо изменение константы это UB. Тестил такое изменение на gcc 4.8.4 и clang++-3.6 - на обоих меняется не всегда

zamazan4ik ★★
() автор топика
Ответ на: комментарий от zamazan4ik

есть шанс неплохой, что она просто не поменяется, ибо изменение константы это UB. Тестил такое изменение на gcc 4.8.4 и clang++-3.6 - на обоих меняется не всегда

Это особенность компилятора и проводимых компилятором оптимизаций (т.к. он имеет полное право раскрыть костанту во время компиляции единицы трансляции).

Но Python не компилируемый, а интерпретируемый, поэтому тут такого нет. Да и смысла особого нет, т.к. либы распространяются в виде исходников и никто не сможет помешать желающему залезть в исходник и поменять значение константы. Так что какой смысл в константе?

Norgat ★★★★★
()
Ответ на: комментарий от zamazan4ik

Ну если у тебя в глобально объявлена FOO_BAR в этом же модуле ты её поменять не сможешь внутни функций(без явного указания global FOO_BAR, но так никто не делает). Ты можешь только создать локальную переменную с таким же именем, но это значение будет видно только внутри скопа.

http://i.imgur.com/XZI3OLi.png

pawnhearts ★★★★★
()
Ответ на: комментарий от zamazan4ik

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

t184256 ★★★★★
()
Ответ на: комментарий от zamazan4ik

PHP

PHP — твой выбор. Там и константы есть, даже аннотации типов, чего только нет. Скоро быть может даже JIT запилят.

Kilte ★★★★★
()
Ответ на: комментарий от zamazan4ik

Пытаюсь понять, как защититься от потенциального говнокодинга

Надо код писать и документировать моменты важные, а не защищаться от всего подряд.

loz ★★★★★
()
Ответ на: комментарий от bvn13

но мы же можем переменной, которая отвечает за кортеж, просто присвоить число какое-нибудь, и кортежа там уже не будет

zamazan4ik ★★
() автор топика
Ответ на: комментарий от zamazan4ik

но мы же можем переменной, которая отвечает за кортеж, просто присвоить число какое-нибудь, и кортежа там уже не будет

Сделай замыкание, епт.

anonymous
()
Ответ на: комментарий от zamazan4ik

та не, я в плюсы хочу.

Это диагно.

В Python никак. Python - набор костылей как и С++, в нем то, что есть и должно быть в нормальных языках программирования - отсутствует.

silver-bullet-bfg ★★
()
Ответ на: комментарий от silver-bullet-bfg

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

pawnhearts ★★★★★
()
Ответ на: комментарий от silver-bullet-bfg

не хочу разводить холивар, да и опытным разрабом меня никак нельзя назвать. Но что это за такие нормальные языки? Джава с шарпом что ли?:)

zamazan4ik ★★
() автор топика

в эрланге есть атомы - это в некоторых случаяхткруче констант, возможно в пайтоне тоже есть что-то подходящее

anonymous
()
25 октября 2017 г.
Ответ на: комментарий от anonymous

В Эрланге любая переменная - в некотором роде константа, так как, они неизменяемые. Но вообще там есть -define(CONSTNAME, 1), которую можно в коде вызвать ?CONSTNAME (вернет 1) - вот и константа. Это по-человечески и нормально. А в Питоне так: ребят, я тут написал большими буквами, это у меня типа константа, вы сделайте вид, пожалуйста, что не можете её изменять. А если из-за ошибки в коде она у тебя изменилась, значит ты говнокодер, ровняй руки. Мне приходится иметь дело с питоном для написания GUI - клиента. Это задница, а не язык после Эрланга и даже JavaScript.

anonymous
()
Ответ на: комментарий от anonymous

Добавлю. Мне нравится Питон как язык для простых скриптов в линуксе. Если надо быстро что-то написать, не важно как, главное быстро, питон - то, что надо. Но для серьезных приложений я никогда не выберу питон.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.