Как поместить несколько операторов в одну строку?

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

Я знаю немного понимания в python, но они кажутся очень трудными для чтения. Как я вижу это, понимание может выполнить то же самое, что и следующий код:

for i in range(10): if i == 9: print('i equals 9')

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

мой вопрос:

Есть ли способ получить следующий пример в ONE LINE.

try:
    if sam[0] != 'harry':
        print('hello',  sam)
except:
    pass

Что-то вроде этого было бы здорово:

try: if sam[0] != 'harry': print('hellp',  sam)
except:pass

Но снова я сталкиваюсь с конфликтующими: Я также хотел бы знать, есть ли способ запустить try (или что-то вроде этого), но, кроме всего прочего, кажется совершенно бессмысленным, что мне нужно поставить, кроме: pass in there. его потерянная линия.

Спасибо вам за вклад... и вот смайлик : D

Ответ 1

К сожалению, вы не можете использовать Python (что делает Python почти бесполезным для однострочных программ командной строки). Даже явное использование круглых скобок не исключает исключения синтаксиса. Вы можете уйти с помощью последовательности простых операторов, разделенных точкой с запятой:

for i in range(10): print "foo"; print "bar"

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

for i in range(10): print "i equals 9" if i==9 else None

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

Что касается объекта try ... except: это было бы абсолютно бесполезно без except. try говорит: "Я хочу запустить этот код, но это может вызвать исключение". Если вы не заботитесь об исключении, оставьте try. Но как только вы положите его, вы говорите: "Я хочу обработать потенциальное исключение". pass затем говорит, что вы хотите не обращаться с ним конкретно. Но это означает, что ваш код будет продолжать работать, что в противном случае не будет.

Ответ 2

Вы можете использовать встроенную инструкцию exec, например:

exec("try: \n \t if sam[0] != 'harry': \n \t\t print('hello',  sam) \nexcept: pass")

Где \n - это символ новой строки, а \t используется как отступ (вкладка).
Кроме того, вы должны подсчитать пробелы, которые вы используете, поэтому ваш отступ точно соответствует.

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

exec - довольно опасное утверждение (особенно при создании webapp), поскольку оно позволяет выполнять произвольный код Python.

Ответ 3

Не делайте этого!

То, что вы описываете, - это не понимание. Это непостижимо!

Из Руководство по стилю PEP 8 для кода Python, которое необходимо для каждого разработчика Python:

  • Составляющие утверждения (несколько операторов в одной строке) обычно обескуражены.

Да:

      if foo == 'blah':
          do_blah_thing()
      do_one()
      do_two()
      do_three()

Скорее не:

      if foo == 'blah': do_blah_thing()
      do_one(); do_two(); do_three()

Вот пример понимания, чтобы сделать различие:

>>> [i for i in xrange(10) if i == 9]
[9]

Ответ 4

Вы смешиваете много вещей, что затрудняет ответ на ваш вопрос. Короткий ответ: насколько я знаю, то, что вы хотите сделать, просто невозможно в Python - по уважительной причине!

Более длинный ответ заключается в том, что вы должны сделать себя более комфортно с Python, если вы хотите развиваться в Python. Понятия не трудно читать. Вы можете не использовать их для чтения, но вам нужно привыкнуть к нему, если вы хотите быть разработчиком Python. Если есть язык, который лучше соответствует вашим потребностям, выберите его. Если вы выберете Python, будьте готовы решить проблемы в питоническом ключе. Конечно, вы свободны бороться с Python, но это не будет весело!; -)

И если вы скажете нам, какова ваша настоящая проблема, вы даже можете получить пифонический ответ. "Получение чего-то в одной строке" обычно не проблема программирования.

Ответ 5

может быть с "и" или "или"

после ложной необходимости писать "или"

после истинной необходимости писать "и"

like

n=0
def returnsfalse():
    global n
    n=n+1
    print ("false %d" % (n))
    return False
def returnstrue():
    global n
    n=n+1
    print ("true %d" % (n))
    return True
n=0
returnsfalse() or  returnsfalse() or returnsfalse() or returnstrue() and returnsfalse()

результат:

false 1
false 2
false 3
true 4
false 5

или, может быть,

(returnsfalse() or true) and (returnstrue() or true) and ...

получил здесь, выполнив поиск google "как поместить несколько статусов в одну строку python", а не напрямую отвечает на вопрос, возможно, кому-то это нужно.

Ответ 6

Вот пример:

для я в диапазоне (80, 90): print (i, end = ""), если (i!= 89) else print (i)

Вывод: 80 81 82 83 84 85 86 87 88 89

<Р →

Ответ 7

Возможно его acctualy; -)

# not pep8 compatible^
sam = ['Sam',]
try: print('hello',sam) if sam[0] != 'harry' else rais
except: pass

Вы можете делать очень уродливые вещи в python, например:

def o(s):return''.join([chr(ord(n)+(13if'Z'<n<'n'or'N'>n else-13))if n.isalpha()else n for n in s])

который является функцией для шифрования rot13/cesa в одной строке с 99 символами.