Ответ 1
Ну,
if "exam" in "example": print "yes!"
Это улучшение? Нет. Вы даже можете добавить в тело if
-clause больше операторов, разделив их точкой с запятой. Я рекомендую против.
Каждый раз так часто здесь я вижу код и выглядит как "однострочный", который является одним строковым выражением, которое стандартным образом выполняет традиционный оператор "if" или цикл "for".
Я googled вокруг и не могу действительно найти, какие из них вы можете выполнить? Может ли кто-нибудь посоветовать и, желательно, привести несколько примеров?
Например, могу ли я сделать это в одной строке:
example = "example"
if "exam" in example:
print "yes!"
Или:
for a in someList:
list.append(splitColon.split(a))
Ну,
if "exam" in "example": print "yes!"
Это улучшение? Нет. Вы даже можете добавить в тело if
-clause больше операторов, разделив их точкой с запятой. Я рекомендую против.
Я обнаружил, что в большинстве случаев выполнение блок-предложений на одной строке - плохая идея.
Это снова, как правило, уменьшит качество формы кода. Форма высокого качества кода является ключевой языковой функцией для 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 очень важна.
В общем случае все синтаксически действительны:
if condition:
do_something()
if condition: do_something()
if condition:
do_something()
do_something_else()
if condition: do_something(); do_something_else()
... и т.д..
пример языковой функции, которая не просто удаляет разрывы строк, хотя все еще не убеждена, что это яснее, чем более подробная версия
a = 1, если 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 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)()
Погружение в python немного, где он говорит о том, что он называет и-трюк, который кажется эффективным способом втискивать сложная логика в одну строку.
В принципе, он имитирует тройной операнд в c, давая вам способ проверить истину и вернуть значение, основанное на этом. Например:
>>> (1 and ["firstvalue"] or ["secondvalue"])[0]
"firstvalue"
>>> (0 and ["firstvalue"] or ["secondvalue"])[0]
"secondvalue"
Это пример "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