У нас в настоящее время есть одно ответвление для текущего технического обслуживания, одно ответвление для "новых инициатив", которое просто означает "материал, который выйдет когда-то в будущем; мы не уверены когда". У нас также иногда было два продолжения ответвлений обслуживания: один для обеспечения фиксирует для того, что в настоящее время работает и тот, который находится все еще в QA.
основным преимуществом, которое мы видели, является способность реагировать на пользовательские запросы и чрезвычайные ситуации более быстро. Мы можем сделать закрепление на ответвлении, которое работает, и выпустите его, не выпуская ничего дополнительного, в котором, возможно, уже зарегистрировались.
основной недостаток - то, что мы заканчиваем тем, что делали большое слияние между ответвлениями, которое увеличивает шанс, что что-то будет пропущено или объединилось неправильно. До сих пор это не было проблемой, но это - определенно что-то для учета.
, Прежде чем мы установили эту политику, мы обычно делали всю разработку в соединительной линии и только переходили, когда мы выпустили код. Мы тогда сделали фиксирует против того ответвления по мере необходимости. Это было более просто, но не как гибкое.
Хорошо,
if "exam" in "example": print "yes!"
Это улучшение? № . Вы даже можете добавить больше операторов в тело предложения if
, разделив их точкой с запятой. Я рекомендую против этого.
Я обнаружил, что в большинстве случаев размещение блоковых предложений в одной строке - плохая идея.
Это, опять же в целом, снизит качество формы код. Форма кода высокого качества - ключевая особенность языка 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 очень важна.
В общем, все следующие синтаксически допустимы:
if condition:
do_something()
if condition: do_something()
if condition:
do_something()
do_something_else()
if condition: do_something(); do_something_else()
... и т. Д.
пример языковой функции, которая не просто удаляет разрывы строк, хотя до сих пор не уверен, что это яснее, чем более подробная версия
a = 1 if x> 15 else 2
for a in someList:
list.append(splitColon.split(a))
Вы можете переписать приведенное выше как:
newlist = [splitColon.split(a) for a in someList]
Python позволяет помещать предложение с отступом в одну строку, если это только одна строка:
if "exam" in example: print "yes!"
def squared(x): return x * x
class MyException(Exception): pass
Вы можете сделать все это в одной строке, опуская переменную example
:
if "exam" in "example": print "yes!"
Старые версии 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)()
В погружении в python есть место, где он говорит о том, что он называет и / или трюком , что кажется эффективным способом втиснуть сложную логику в одну строку.
По сути, он имитирует тернарный оператор в c, давая вам возможность проверить истинность и вернуть значение, основанное на этом. Например:
>>> (1 and ["firstvalue"] or ["secondvalue"])[0]
"firstvalue"
>>> (0 and ["firstvalue"] or ["secondvalue"])[0]
"secondvalue"