Как проверить значение одной из переменных из нескольких возвращаемых значений в операторе IF в Python

Кто-нибудь знает, как проверить значение переменной a == 0 из функции с несколькими возвращаемыми значениями в одном операторе IF, как показано ниже,

if (a, b, c = some_function()) == 0: #currently it is wrong
    ...
    ...
else:
    ...
    ...

def some_function():
    return 0, 123, "hello"

person Ameen Abbas    schedule 15.09.2020    source источник
comment
Сделайте это более чем в одну строку. 1) вызвать функцию и присвоить возвращаемые значения; 2) проверьте значение a.   -  person wwii    schedule 15.09.2020
comment
Если вы настаиваете на том, чтобы сделать это одной строкой, вам понадобится оператор := walrus.   -  person Prune    schedule 15.09.2020
comment
@Prune, как этот оператор можно использовать с несколькими возвращаемыми значениями?   -  person wwii    schedule 15.09.2020


Ответы (2)


Сначала распакуйте возвращаемые значения в переменные, затем проверьте значение переменной.

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

a, _, _ = some_function()
if a == 0:
    # ...

Или, если вам вообще не нужно обращаться к каким-либо возвращаемым значениям позже, вы можете использовать индексирование:

if some_function()[0] == 0:
    # ...

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

Было бы заманчиво использовать оператор моржа :=, но это не поддерживает итерируемую распаковку (используется в первом примере).

person mkrieger1    schedule 15.09.2020
comment
Спасибо @mkrieger1, у меня все получилось. Но мне нужно снова вызвать функцию внутри IF, чтобы получить возвращаемые значения, но я могу с этим смириться. - person Ameen Abbas; 17.09.2020

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

def some_function():
    return 0, 123, "hello"

if (my_tuple := some_function() )[0] == 0:
    print ("Check worked")
else:
    print ("Check failed")

a, b, c = my_tuple

Это очень близко к ответу mkrieger1's (за который проголосовали), добавляя только демонстрацию получения одного возвращаемого значения в назначении моржа.

person Prune    schedule 15.09.2020
comment
Как бы я ни хотел использовать это решение, но не могу, так как использую Python 3.7 и вижу, что морж работает только с 3.8. На данный момент решение mkrieger1 сработало для меня. Конечно, нужно снова вызвать ту же функцию в IF, чтобы получить возвращаемые значения, но это работает. - person Ameen Abbas; 17.09.2020