2010-10-19 2 views
0

Je souhaite modifier la valeur d'une variable dans une boucle, mais alors la nouvelle variable conservée a changé lorsque la boucle se termineen python 2.6 Comment modifier une variable globale dans une boucle

ma tentative (un peu simplifié de ce que je suis en train de faire)

SNP est une liste et compar_1 est une liste de listes

line_1 = empty_row 
for SNP1 in compar_1: 
    global line_1 
    if SNP[3] == SNP1[3] 
     compare_line_1 = SNP1 
print = line_1 
output_file.write(to_print) 

si elle trouve une correspondance dans la boucle que je veux changer la variable que si c'est ce qui est imprimé, s'il ne trouve pas de correspondance dans la boucle for wan t pour imprimer la « empty_row » (une chaîne définie précédemment)

+4

Il est un peu difficile de voir ce que vous dites ... vous pouvez assigner la variable dans une boucle, comme vous le feriez en dehors de cela. – Tim

+0

Pouvez-vous publier votre message dans la question d'origine? (Utilisez le lien 'edit'.) –

+3

c'est loin de python valide, pourriez-vous poster votre code actuel? – SilentGhost

Répondre

1

for boucles ne modifient pas la portée des variables en Python (comme ils pourraient en C)

Si vous utilisez des variables dans une fonction, vous pouvez utiliser global [var] pour déclarer que lorsque vous faites référence à [var] que vous voulez dire le mondial.

This est une vue d'ensemble décent de portée en Python

+0

voir autre commentaire re portée, et merci Je pensais peut-être qu'il serait redéfini dans les itérations suivantes, mais si cela ne change que si cette condition est rencontré il ne devrait pas être affecté par itération ultérieure du tout ... – Kirt

3

Si vous aviez essayé de changer simplement la variable, vous auriez vu que ça fonctionne. Python n'a pas de portée distincte pour les boucles.

+0

ah ... je me demandais à ce sujet il y a un certain temps et ne pouvais pas trouver une réponse définitive, donc j'ai couru sur la supposition contraire, je ' Je vais le sortir et le tester, merci. – Kirt

0
for SNP1 in compar_1: 
    if SNP[3] == SNP1[3]: 
     line_1 = SNP1 
     break 
else: 
    line_1 = empty_row 
to_print = line_1 
output_file.write(to_print) 
+0

qui semble plus élégant que le mien, mais l'autre ne doit pas être en ligne avec le si? ça a l'air un peu bizarre. – Kirt

+0

Le 'else' appartient au' for', pas le 'if'. Si la boucle ne fait pas au moins une itération, le bloc 'else' est exécuté. – kindall

+0

ouais je me demandais si cela pourrait être le cas, mais je ne pouvais pas savoir comment ça pourrait avoir un autre, est-ce que cela se rapporte à la pause? – Kirt

Questions connexes