Коротки 'если'/'for '-операторы хороший стиль Python?

У нас в настоящее время есть одно ответвление для текущего технического обслуживания, одно ответвление для "новых инициатив", которое просто означает "материал, который выйдет когда-то в будущем; мы не уверены когда". У нас также иногда было два продолжения ответвлений обслуживания: один для обеспечения фиксирует для того, что в настоящее время работает и тот, который находится все еще в QA.

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

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

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

40
задан smci 17 November 2017 в 19:31
поделиться

9 ответов

Хорошо,

if "exam" in "example": print "yes!"

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

53
ответ дан 27 November 2019 в 01:04
поделиться

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

Это, опять же в целом, снизит качество формы код. Форма кода высокого качества - ключевая особенность языка Python.

В некоторых случаях python предлагает способы делать вещи в одной строке, которые определенно более питоничны. Такие вещи, как то, что Ник D упомянул с пониманием списка:

newlist = [splitColon.split(a) for a in someList]

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

listgen = (splitColon.split(a) for a in someList)

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

В современных версиях Python также есть встроенный тернарный оператор, который позволяет вам делать такие вещи, как

string_to_print = "yes!" if "exam" in "example" else ""
print string_to_print

или

iterator = max_value if iterator > max_value else iterator

. Некоторым они могут показаться более читаемыми и удобными, чем аналогичный if (условие): Блок .

Когда доходит до этого, это касается стиля кода и того, что является стандартом для команды, над которой вы работаете. Это наиболее важно, но в целом я бы не советовал использовать однострочные блоки, так как форма кода на Python очень важна.

39
ответ дан 27 November 2019 в 01:04
поделиться

В общем, все следующие синтаксически допустимы:

if condition:
    do_something()


if condition: do_something()

if condition:
    do_something()
    do_something_else()

if condition: do_something(); do_something_else()

... и т. Д.

18
ответ дан 27 November 2019 в 01:04
поделиться

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

a = 1 if x> 15 else 2

11
ответ дан 27 November 2019 в 01:04
поделиться
for a in someList:
    list.append(splitColon.split(a))

Вы можете переписать приведенное выше как:

newlist = [splitColon.split(a) for a in someList]
7
ответ дан 27 November 2019 в 01:04
поделиться

Python позволяет помещать предложение с отступом в одну строку, если это только одна строка:

if "exam" in example: print "yes!"

def squared(x): return x * x

class MyException(Exception): pass
6
ответ дан 27 November 2019 в 01:04
поделиться

Вы можете сделать все это в одной строке, опуская переменную example :

if "exam" in "example": print "yes!"
3
ответ дан 27 November 2019 в 01:04
поделиться

Старые версии Python допускали только один простой оператор после for ...: if ...: или аналогичных вводных операторов блока.

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

for i in range(3): print "Here's i:"; print i

... но, с другой стороны, мы не можем:

for i in range(3): if i % 2: print "That's odd!"

Мы можем:

x=10
while x > 0: print x; x-=1

... но мы не можем:

x=10; while x > 0: print x; x-=1

... и так далее

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

В некоторых случаях возможно комбинировать несколько операторов в строке. Например:

x=0; y=1

... или даже:

if some_condition(): break

... для простого break continue и даже return операторов или заданий.

В частности, если нужно использовать серию elif , можно использовать что-то вроде:

if     keystroke == 'q':   break
elif   keystroke == 'c':   action='continue'
elif   keystroke == 'd':   action='delete'
# ...
else:                      action='ask again'

... тогда вы можете не слишком раздражать своих коллег. (Тем не менее, цепочки elif , похожие на этот крик, должны быть преобразованы в таблицу диспетчеризации ... словарь, который мог бы больше выглядеть:

dispatch = {
    'q': foo.break,
    'c': foo.continue,
    'd': foo.delete
    }


# ...
while True:
    key = SomeGetKey()
    dispatch.get(key, foo.try_again)()
4
ответ дан 27 November 2019 в 01:04
поделиться

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

По сути, он имитирует тернарный оператор в c, давая вам возможность проверить истинность и вернуть значение, основанное на этом. Например:

>>> (1 and ["firstvalue"] or ["secondvalue"])[0]
"firstvalue"
>>> (0 and ["firstvalue"] or ["secondvalue"])[0]
"secondvalue"
0
ответ дан 27 November 2019 в 01:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: