Назначать, сравнивать и использовать значение в одной строке - PullRequest
0 голосов
/ 04 января 2019

Текущий код:

error = dict.get("error", None)
if error:
    print(error)

Есть ли способ поместить его в одну строку, например:

print(error) if (error = dict.get("error", None))

В C вы можете присвоить значение, затем сравнить, затем напечататьэто в одной строке:

if (a = 5) printf("%d",a);

Ответы [ 4 ]

0 голосов
/ 04 января 2019

Вы можете просто использовать inline if else, предоставленный python.

print('error') if dict.get("error") else 0

Вот оно!Надеюсь, это поможет:)

0 голосов
/ 04 января 2019

Вместо использования троичного print("" if not d.get("error") else d["error"]) вы можете использовать dict.get(key,default) и print() с троичным сообщением end="" или end="\n", чтобы избежать / использовать символ новой строкипосле него:

d = {"error": "plenty"}  

print( d.get("error",""), end = "\n" if d.get("error","") else "")

Это ничего не печатает (даже перевод строки из-за end=""), если ключ отсутствует.

См. Почему dict.get (ключ)вместо dict [ключ]?

0 голосов
/ 04 января 2019

В Python 3.8 вы сможете написать

if error := dict.get("error", None):
    print(error)

В Python нет модификаторов операторов в стиле Perl, но, поскольку print - это функция, вы можете написать выражение в виде

print(error) if (error := dict.get("error", None)) else None

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


Простое if подобное утверждение, тем не менее, может быть записано в одну строку (хотя, опять же, я бы не рекомендовал это; PEP-8 явно хмурится на

if error := dict.get('error', None): print(error)

)

0 голосов
/ 04 января 2019

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

error = my_dict.get("error", None); print(error) if error is not None else None

Должно работать, но я печатаю на телефоне и не могу проверить.

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