J'écris une fonction pour retourner plusieurs listes (au moins une). Il est ressemble ci-dessous:tuple de retour de fonction. parfois obtenir des listes, parfois obtenir tuple
def get_stock_atrributes_data(stock, attrList):
dbClient = MongoClient()
db = dbClient.StockAnnual
#only query the data we need
query = {attr: 1 for attr in attrList}
#exclude id
query['_id'] = 0
cursor = db[stock].find({}, query).sort([('date', pymongo.ASCENDING)])
#tranform cursor to list so it becomes iterative
l = list(cursor)
res = []
for attr in attrList:
res.append([d[attr] for d in l])
return tuple(res)
Pour le faire, je l'utilise tuple je peux utiliser
list1, list2 = get_stock_atrributes_data()
à interroger plusieurs attributs des listes déterminées par le attrList
. Lorsque je renvoie plusieurs listes (plus d'une), cela fonctionne plutôt bien. Mais si je retourne une seule liste, le résultat est un tuple contenant une liste, par exemple:
list1 = get_stock_atrributes_data()
Le list1
est un tuple plutôt qu'une liste maintenant. J'ai lu quelques explications sur le renvoi des tuples. On dit que les éléments dans tuple seront déballés et assignés automatiquement. Pour un tuple retourné avec plus d'un élément, cela fonctionne. Mais pour tuple ne contenant qu'un seul élément, le résultat n'est pas décompressé. J'étais confus par ceci et espère que quelqu'un peut me donner l'explication.
Bonne réponse, mais veuillez mettre l'accent sur la virgule. –
Salut, il a résolu le problème! Pourriez-vous m'aider à expliquer pourquoi une simple virgule résout le problème? – dashenswen
La fonction retourne toujours un tuple, donc si vous êtes réellement intéressé par les éléments d'un tuple, vous devez y accéder directement. Lorsque vous utilisez la virgule, il accède au premier (et seul) élément du tuple. – Robbie