La réponse courte: Comme d'autres l'ont dit, vous devez décompresser le tuple vous retournez, et les valeurs seront à votre disposition:
invid, stock, published, price, invtype, title, author = read_one_file()
La longue réponse: Cela pourrait être un peu long, mais supporter avec moi, car c'est une information importante pour comprendre comment fonctionnent les différents langages de programmation. Le problème que vous rencontrez est une compréhension de la portée, la durée de vie des variables dans certaines portées, et comment les variables peuvent être transférées entre deux portées différentes. Je ferai de mon mieux pour aborder chacun d'entre eux, et comment cela se rapporte à votre problème.
Scope est essentiellement une section de votre programme dans laquelle certaines variables que vous déclarez existeront. Lorsque vous avez défini la fonction:
def read_one_file():
f = open('C:\Python27\inventory.dat', 'r')
invid = f.readline()
stock = f.readline()
published = f.readline()
price = f.readline()
invtype = f.readline()
title = f.readline()
author = f.readline()
return invid, stock, published, price, invtype, title, author
vous avez défini la portée. Les variables invid, stock, published, price, invtype, title et author existent dans cette fonction et cessent d'exister une fois cette fonction terminée. Python s'avère être un très bon visualiseur de portée, puisqu'il dépend de l'espace/des tabulations. Un nouveau niveau d'indentation définit une nouvelle étendue.
Afin d'obtenir une variable/valeur hors de la portée d'une fonction, vous pouvez le retourner, comme vous l'avez fait dans votre fonction. Mais la partie de votre programme qui appelle la fonction doit spécifier des variables dans sa propre portée qui recevront les valeurs renvoyées par la fonction.(Et pour recevoir les données, vous affectez la variable au résultat de la fonction: var = function()
)
Dans votre code posté, vous avez appelé read_one_file()
mais n'a affecté aucune variable à ses valeurs renvoyées. Lorsque vous avez essayé d'accéder à l'une des valeurs que vous pensiez que vous reveniez:
print "Update Number In Stock"
print "----------------------"
print "Item ID: ", invid
invid
est pas techniquement une variable en dehors de read_one_file()
, donc une erreur se produit. La clé est que les variables retournées ne les transfèrent pas automatiquement, par leur nom, à la portée de l'appelé (le code appelant la fonction). Vous devez spécifier une nouvelle variable dans l'appelé pour recevoir la valeur retournée.
Espérons que cela aide :)
Ce n'est pas trop sec ... Aussi, il préserve toutes les nouvelles lignes présentes dans le fichier. –
+1 pour répondre à la question d'une manière que le répondant peut comprendre. N'allons pas trop loin devant le public, @NiklasB. – mattbornski
Eh bien, j'allais plus à partir d'un 'voici quelques améliorations que vous pouvez apporter à votre code' afin qu'il n'ait pas à chercher trop pour le comprendre. Le déballage, avec des déclarations et des dits, pourrait être nouveau pour lui, alors je suis allé avec les améliorations les plus évidentes venant du code qu'il avait déjà écrit. – deontologician