2014-03-26 5 views
4

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

Например:

if this: 
    if that: 
     if here: 
      if there: 
       big_variable['big_key']['big_value'] = another_big_variable_that_pushes_line_over_79_characters 
       other_thing = something 

Характера Ограничители нарушение только в одной цифре, но я хочу, чтобы очистить свой код так, что следует PEP-как можно точнее. Я сделал следующее, но я все еще достаточно новое для питона, и я не уверен, если это такая вещь, что бы опытный программист питона съежиться:

if this: 
    if that: 
     if here: 
      if there: 
       big_variable['big_key']['big_value'] = \ 
        another_big_variable_that_pushes_line_over_79_characters 
       other_thing = something 

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

+0

Можете ли вы дать реальный кусок кода? –

+1

Иногда, вместо того, чтобы найти соглашение, чтобы выполнить что-то красиво, лучше, если вы вообще не будете вынуждены принять соглашение, удалив корень проблемы. Тем не менее, если это хорошо знать, почему имена переменных «довольно длинные» в первую очередь? Кроме того, «довольно длинные значения/выражения» в порядке ... Если вы не повторяете достаточное количество кода с каждым выражением. – Manhattan

+0

Имя переменной более 79 символов является чрезвычайно подозрительным. Это на самом деле какое-то выражение? –

ответ

5

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

Использование символа продолжения линии \ - всего лишь один инструмент в нашем арсенале для достижения этой цели разборчивости.

Соглашения об именовании - еще одна проблема. Как сказал да Винчи: «Простота - это высшая изощренность». Если вы можете сделать имена переменных маленькими и понятными, то вы сложны ;-). Слишком просто сказать var1, var2, var3 и т. Д. Прибытие с хорошими именами - это умение, которое требует усилий.

Вы предпочитаете переменную с именем ChiefExecutiveOfficerOfCompanysName или CEOName?

Если вы можете комбинировать if, то ваш код может стать еще более разборчивым. Скорее всего, если у вас есть большая иерархия if...else-if, то вы делаете что-то неправильно (это code smell). Например, вы можете изменить это:

if this: 
    if that: 
     if here: 
      if there: 

В это:

if this and that and here and there: 

Или бросить такую ​​грубую логику в функцию оценщика следующим образом:

if EvaluateConditions(<args>): 

Нарушение кода на логические куски , и включение этих частей в функции - это еще один способ сделать чтение понятным (у нас только столько оперативной памяти, и мы хотели бы вместить в него целые функции ...люди не очень хорошо пейджинга)

Избегайте копирования и вставки кода с небольшими изменениями с помощью параметризованных функций, или некоторые хорошие designpatterns

+0

Очень хороший ответ! – BartoszKP

+0

+1: Именно то, о чем я думал. Python достаточно хорош, чтобы позволить вам уйти с множеством вещей, но непринужденность использования не должна подвергаться насилию до такого уровня, который граничит с непреднамеренной запутанностью. – Manhattan

+0

Спасибо! Иерархия if не является таким глупым, очевидно, и у меня больше проблем с именами переменных, которые, как я сказал в комментарии выше, я действительно не контролирую. Мне было просто любопытно, если мое решение было тем, что использовалось без особой суеты, или если бы это было чем-то, что я должен был бы с невероятной осторожностью. – SheffDoinWork

4

Я не думаю, что есть проблема с продолжением строки в Python. Но иногда я предпочитаю это:

big_variable['big_key']['big_value'] =(
    another_big_variable_that_pushes_line_over_79_characters 
) 

Он полезен и в длинных выражениях.

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