Подтвердить что ты не робот

Являются ли однострочные "if" / "for'-statements" хорошим стилем Python?

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

Я googled вокруг и не могу действительно найти, какие из них вы можете выполнить? Может ли кто-нибудь посоветовать и, желательно, привести несколько примеров?

Например, могу ли я сделать это в одной строке:

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

Или:

for a in someList:
    list.append(splitColon.split(a))
4b9b3361

Ответ 1

Ну,

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

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

Ответ 2

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

Это снова, как правило, уменьшит качество формы кода. Форма высокого качества кода является ключевой языковой функцией для python.

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

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 (condition):.

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

Ответ 3

В общем случае все синтаксически действительны:

if condition:
    do_something()


if condition: do_something()

if condition:
    do_something()
    do_something_else()

if condition: do_something(); do_something_else()

... и т.д..

Ответ 4

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

a = 1, если x > 15 else 2

Ответ 5

for a in someList:
    list.append(splitColon.split(a))

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

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

Ответ 6

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

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

def squared(x): return x * x

class MyException(Exception): pass

Ответ 7

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

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

Ответ 8

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

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

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

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

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

Мы можем:

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

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

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

... и т.д.

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

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

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)()

Ответ 9

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

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

>>> (1 and ["firstvalue"] or ["secondvalue"])[0]
"firstvalue"
>>> (0 and ["firstvalue"] or ["secondvalue"])[0]
"secondvalue"

Ответ 10

Это пример "if else" с действиями.

>>> def fun(num):
    print 'This is %d' % num
>>> fun(10) if 10 > 0 else fun(2)
this is 10
OR
>>> fun(10) if 10 < 0 else 1
1