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

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

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

  • есть ли способ отслеживать количество раз, когда функция вызывается?
  • У вас есть дополнительные условия цикла ... на основе условия?
  • «Num - 1» против «num - = 1»
  • Как изменить записи списка во время цикла?
  • обратные слова в предложении pythonic
  • python: поиск подстроки внутри строки
  • return None if x is None 

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

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

     if x is None: return None 

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

  • групповой список целых последовательностей
  • Позиционный аргумент против ключевого слова
  • Как сделать списки разными?
  • Не удалось обновить данные в другом файле с помощью python
  • Что это за синтаксис Python? rect + = rects
  • Могу ли я динамически преобразовывать экземпляр одного класса в другой?
  • 4 Solutions collect form web for “Можно ли написать оператор прямой строки с инструкцией if?”

    В одной строке можно написать стандартный оператор «if»:

     if x is None: return None 

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

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

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

     return None if x is None else something_else 

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

    Отказ от ответственности: на самом деле этого не делайте. Если вы действительно хотите, чтобы один лайнер, как и нагофан, сказал, просто нарушите правило из PEP-8. Тем не менее, это иллюстрирует, почему 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) 

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

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

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

    Python - лучший язык программирования в мире.