Как я могу вкладывать однострочные операторы в Python? - PullRequest
1 голос
/ 25 апреля 2019

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

if some_condition:
    do_something()

На это:

if some_condition: do_something()

Это изменение, конечно,работает только в том случае, если код внутри оператора if состоит только из одной строки.

Однако, если имеется более одной вложенной «конструкции» (я имею в виду такие вещи, как if-else, for, while илипопробуй-исключение) тогда получаю синтаксическую ошибку.Например, я не могу изменить это:

if some_condition:
    if other_condition:
        do_something()

На это:

if some_condition: if other_condition: do_something()

Или даже это:

if some_condition: if other_condition:
    do_something()

Но это работает:

if some_condition:
    if other_condition: do_something()

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

if some_condition: (if other_condition: do_something())

Это, конечно, не работает.Однако, надеюсь, это делает немного более ясным, что именно я пытаюсь сделать здесь.Будут оценены любые идеи, кроме «Вы не должны этого делать».

Прежде чем я получу приток всех вас, пуристов, которые приходят и проповедуют, как это не пифонично или что-то еще, ДА, я знаючто это не лучший способ написания кода на Python.Считайте это вопросом исследования.Я просто хочу знать, возможно ли то, что я ищу.

Ответы [ 3 ]

1 голос
/ 25 апреля 2019

Невозможно поместить несколько двоеточий в одну строку.

В любом случае, PEP8 рекомендует всегда следовать за двоеточием с новой строкой.В большинстве случаев лучше следовать этому руководству.

Как отмечает @Suven Pandey, операторы if могут быть вложены в одну строку, используя вложенные троичные операторы, но, пожалуйста, не используйте более одного на одномлиния.На этом этапе код в высшей степени безобразен и нечитаем.

0 голосов
/ 25 апреля 2019

Вы можете использовать функцию exec для объединения вложенных конструкций в одну строку, если вы предоставляете правильные комбинации новой строки и табуляции в строке, которая будет выполнена.

exec ('a=7\nif a>3:\n\tfor x in range(a):\n\t\tif x != 5:\n\t\t\tprint("Wow!")')
0 голосов
/ 25 апреля 2019

В некоторых случаях вы можете сделать:

a = 7
b = 4
print(a) if a == 7 else 3 if b ==4 else 0 #print a 
print(a) if a == 27 else 3 if b ==4 else 0 #print 3
print(a) if a == 27 else 3 if b ==44 else 0 #print 0

Это работает как print (a), если a == 7 иначе (3, если b == 4) # если a! = 7, но b = 4 иначе 0 # как ложное но это сбивает с толку и, как правило, плохая идея и нарушает дзен питона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...