#python
Вопрос:
Я пытаюсь сделать следующее, но это не работает:
agreements = getEligibleAndActiveAgreements(username).eligibleAgreements
для функции, которая возвращает 2 результата. Я не хочу сначала назначать общую переменную, например result = ..
, а затем проверять result.eligibleAgreements
, я хочу быстро назначить в той же строке конкретную переменную только с одного возврата.
def getEligibleAndActiveAgreements(username):
...
return eligibleAgreements, activeAgreements
Ошибка для getEligibleAndActiveAgreements(имя пользователя).Приемлемые условия
AttributeError: 'tuple' object has no attribute 'eligibleAgreements'
Ошибка для getEligibleAndActiveAgreements(имя пользователя)[«Допустимые элементы»]
TypeError: tuple indices must be integers or slices, not str
Ответ №1:
Попробуйте любой из этих:
agreements, _ = getEligibleAndActiveAgreements(username)
# OR
agreements = getEligibleAndActiveAgreements(username)[0]
Функция возвращает кортеж, содержащий оба значения. Чтобы получить независимый доступ к значениям, вам необходимо использовать значения индекса (начиная с 0) или просто распаковать их в один и отказаться от другого.
Ответ №2:
Ссылки на возвращаемые переменные известны только локально внутри функции, когда вы вызываете функцию, она не знает ссылок из return x,y
строки, это просто кортеж вне функции.
Так что вы можете сделать:
eligibleA, activeA = getEligibleAndActiveAgreements(username)
Или, в качестве альтернативы, просто вернитесь dict
:
def getEligibleAndActiveAgreements(username):
...
return {"eligibleAgreements": eligibleAgreements, "activeAgreements": activeAgreements}
...
agreements = getEligibleAndActiveAgreements(username)
eligibleAgreements = agreements["eligibleAgreements"]
Комментарии:
1. Чтобы добавить,
dict(eligibleAgreements=eligibleAgreements, activeAgreements=activeAgreements)
есть альтернативный синтаксис.