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

Можно ли написать оператор прямой строки с инструкцией if?

Можно ли вернуться из метода в одной строке в python

Ищете что-то вроде этого

return None if x is None

Пробовал выше, и это недопустимый синтаксис

Я мог бы легко сделать:

if x is None:
    return None

Но просто любопытно, могу ли я комбинировать выше оператор if в одной строке

4b9b3361

Ответ 1

Можно написать стандартный оператор "if" в одной строке:

if x is None: return None

Однако руководство pep 8 style рекомендует не делать этого:

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

Ответ 2

Да, он называется условным выражением :

return None if x is None else something_else

Вам нужно else something в условии, чтобы он работал.

Ответ 3

Отказ от ответственности: на самом деле этого не делайте. Если вы действительно хотите, чтобы один лайнер, как и нагофан, сказал, просто нарушите правило из PEP-8. Тем не менее, это иллюстрирует, почему return не ведет себя так, как вы думали, и что будет выглядеть так, как это должно выглядеть так, как вы думали, return может.

Причина, по которой вы не можете сказать return None if x is None, заключается в том, что return вводит инструкцию, а не выражение. Поэтому нет возможности скопировать его в (return None) if x is None else (pass) или что-то еще.

Хорошо, мы можем это исправить. Давайте напишем функцию ret, которая ведет себя как return, за исключением того, что это выражение, а не полный оператор:

class ReturnValue(Exception):
    def __init__(self, value):
        Exception.__init__(self)
        self.value = value

def enable_ret(func):
    def decorated_func(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except ReturnValue as exc:
            return exc.value
    return decorated_func

def ret(value):
    raise ReturnValue(value)

@enable_ret
def testfunc(x):
    ret(None) if x is None else 0
    # in a real use-case there would be more code here
    # ...
    return 1

print testfunc(None)
print testfunc(1)

Ответ 4

Вы также можете попробовать выражение list[bool]:

return [value, None][x == None]

Теперь, если вторая скобка имеет значение true, в противном случае возвращается None, возвращается значение, которое вы хотите вернуть