J'aimerais donc pouvoir indiquer dans fonca, que la variable lst est
celle définie dans fonc1.
Je ne veux pas d'une variable locale à fonca, ni une variable globale
à tout mon fichier (cf exemple ci-dessous)
Une idée ?
J'aimerais donc pouvoir indiquer dans fonca, que la variable lst est
celle définie dans fonc1.
Je ne veux pas d'une variable locale à fonca, ni une variable globale
à tout mon fichier (cf exemple ci-dessous)
Une idée ?
J'aimerais donc pouvoir indiquer dans fonca, que la variable lst est
celle définie dans fonc1.
Je ne veux pas d'une variable locale à fonca, ni une variable globale
à tout mon fichier (cf exemple ci-dessous)
Une idée ?
Bonjour,
Y a t il un équivalent du mot clé global, mais qui désigne une porté
plus petite (juste la portés ENGLOBANTE) ?
Voici un exemple :
def fonc1() :
lst=[]
def fonca(v) :
if len(lst)<3 :
lst.append(v)
print(lst)
return fonca
Puis dans le shell, je fais :f1=fonc1()
f1(1)
[1]f1(2)
[1, 2]f1(3)
[1, 2, 3]f1(4)
[1, 2, 3]
Tout marche comme prévu, la liste grandit à concurrence de 3 valeurs.
Maintenant, je remplace lst.append(v) par lst=lst+[v], qui crée donc une
nouvelle liste, qui va être référencée par lst.
SI j'écris :
def fonc1() :
lst=[]
def fonca(v) :
if len(lst)<3 :
lst=lst+[v]
print(lst)
return fonca
alors ça ne marche plus :f1=fonc1()
f1(1)
Traceback (most recent call last):
File "<pyshell#202>", line 1, in <module>
f1(1)
File "tmp.py", line 4, in fonca
if len(lst)<3 :
UnboundLocalError: local variable 'lst' referenced before assignment
J'ai mis un peu de temps à piger pourquoi l'erreur était sur cette
ligne. J'imagine que Python lit **en avance** le code de fonca, voit
l'affectation, lst=lst+[v] et décide donc que lst est une variable
locale (je suis pas super satisfait de mon explication.... si quelqu'un
en a une autre, je prends)
Mais puisque maintenant c'est une variable locale à fonca, on ne peut
plus faire :
if len(lst)<3
puisqu'à ce moment là, lst n,'existe pas.
J'aimerais donc pouvoir indiquer dans fonca, que la variable lst est
celle définie dans fonc1.
Je ne veux pas d'une variable locale à fonca, ni une variable globale à
tout mon fichier (cf exemple ci-dessous)
Une idée ?
Le code suivant par exemple ;
lst=[]
def fonc1() :
def fonca(v) :
global lst if len(lst)<3 :
lst=lst+[v]
print(lst)
return fonca
marche comme je veux. Mais là, lst est globale. Je voudrais qu'elle
reste locale à fonc1.
Par avance merci.
Bonjour,
Y a t il un équivalent du mot clé global, mais qui désigne une porté
plus petite (juste la portés ENGLOBANTE) ?
Voici un exemple :
def fonc1() :
lst=[]
def fonca(v) :
if len(lst)<3 :
lst.append(v)
print(lst)
return fonca
Puis dans le shell, je fais :
f1=fonc1()
f1(1)
[1]
f1(2)
[1, 2]
f1(3)
[1, 2, 3]
f1(4)
[1, 2, 3]
Tout marche comme prévu, la liste grandit à concurrence de 3 valeurs.
Maintenant, je remplace lst.append(v) par lst=lst+[v], qui crée donc une
nouvelle liste, qui va être référencée par lst.
SI j'écris :
def fonc1() :
lst=[]
def fonca(v) :
if len(lst)<3 :
lst=lst+[v]
print(lst)
return fonca
alors ça ne marche plus :
f1=fonc1()
f1(1)
Traceback (most recent call last):
File "<pyshell#202>", line 1, in <module>
f1(1)
File "tmp.py", line 4, in fonca
if len(lst)<3 :
UnboundLocalError: local variable 'lst' referenced before assignment
J'ai mis un peu de temps à piger pourquoi l'erreur était sur cette
ligne. J'imagine que Python lit **en avance** le code de fonca, voit
l'affectation, lst=lst+[v] et décide donc que lst est une variable
locale (je suis pas super satisfait de mon explication.... si quelqu'un
en a une autre, je prends)
Mais puisque maintenant c'est une variable locale à fonca, on ne peut
plus faire :
if len(lst)<3
puisqu'à ce moment là, lst n,'existe pas.
J'aimerais donc pouvoir indiquer dans fonca, que la variable lst est
celle définie dans fonc1.
Je ne veux pas d'une variable locale à fonca, ni une variable globale à
tout mon fichier (cf exemple ci-dessous)
Une idée ?
Le code suivant par exemple ;
lst=[]
def fonc1() :
def fonca(v) :
global lst if len(lst)<3 :
lst=lst+[v]
print(lst)
return fonca
marche comme je veux. Mais là, lst est globale. Je voudrais qu'elle
reste locale à fonc1.
Par avance merci.
Bonjour,
Y a t il un équivalent du mot clé global, mais qui désigne une porté
plus petite (juste la portés ENGLOBANTE) ?
Voici un exemple :
def fonc1() :
lst=[]
def fonca(v) :
if len(lst)<3 :
lst.append(v)
print(lst)
return fonca
Puis dans le shell, je fais :f1=fonc1()
f1(1)
[1]f1(2)
[1, 2]f1(3)
[1, 2, 3]f1(4)
[1, 2, 3]
Tout marche comme prévu, la liste grandit à concurrence de 3 valeurs.
Maintenant, je remplace lst.append(v) par lst=lst+[v], qui crée donc une
nouvelle liste, qui va être référencée par lst.
SI j'écris :
def fonc1() :
lst=[]
def fonca(v) :
if len(lst)<3 :
lst=lst+[v]
print(lst)
return fonca
alors ça ne marche plus :f1=fonc1()
f1(1)
Traceback (most recent call last):
File "<pyshell#202>", line 1, in <module>
f1(1)
File "tmp.py", line 4, in fonca
if len(lst)<3 :
UnboundLocalError: local variable 'lst' referenced before assignment
J'ai mis un peu de temps à piger pourquoi l'erreur était sur cette
ligne. J'imagine que Python lit **en avance** le code de fonca, voit
l'affectation, lst=lst+[v] et décide donc que lst est une variable
locale (je suis pas super satisfait de mon explication.... si quelqu'un
en a une autre, je prends)
Mais puisque maintenant c'est une variable locale à fonca, on ne peut
plus faire :
if len(lst)<3
puisqu'à ce moment là, lst n,'existe pas.
J'aimerais donc pouvoir indiquer dans fonca, que la variable lst est
celle définie dans fonc1.
Je ne veux pas d'une variable locale à fonca, ni une variable globale à
tout mon fichier (cf exemple ci-dessous)
Une idée ?
Le code suivant par exemple ;
lst=[]
def fonc1() :
def fonca(v) :
global lst if len(lst)<3 :
lst=lst+[v]
print(lst)
return fonca
marche comme je veux. Mais là, lst est globale. Je voudrais qu'elle
reste locale à fonc1.
Par avance merci.
On Thu, 27 Oct 2011 07:45:47 -0700, ll.snark wrote:
> Bonjour,
> Y a t il un équivalent du mot clé global, mais qui désigne une po rté
> plus petite (juste la portés ENGLOBANTE) ?
> Voici un exemple :
> def fonc1() :
> lst=[]
> def fonca(v) :
> if len(lst)<3 :
> lst.append(v)
> print(lst)
> return fonca
> Puis dans le shell, je fais :
>>>> f1=fonc1()
>>>> f1(1)
> [1]
>>>> f1(2)
> [1, 2]
>>>> f1(3)
> [1, 2, 3]
>>>> f1(4)
> [1, 2, 3]
> Tout marche comme prévu, la liste grandit à concurrence de 3 valeur s.
> Maintenant, je remplace lst.append(v) par lst=lst+[v], qui crée don c une
> nouvelle liste, qui va être référencée par lst.
> SI j'écris :
> def fonc1() :
> lst=[]
> def fonca(v) :
> if len(lst)<3 :
> lst=lst+[v]
> print(lst)
> return fonca
> alors ça ne marche plus :
>>>> f1=fonc1()
>>>> f1(1)
> Traceback (most recent call last):
> File "<pyshell#202>", line 1, in <module>
> f1(1)
> File "tmp.py", line 4, in fonca
> if len(lst)<3 :
> UnboundLocalError: local variable 'lst' referenced before assignment
> J'ai mis un peu de temps à piger pourquoi l'erreur était sur cette
> ligne. J'imagine que Python lit **en avance** le code de fonca, voit
> l'affectation, lst=lst+[v] et décide donc que lst est une variable
> locale (je suis pas super satisfait de mon explication.... si quelqu'un
> en a une autre, je prends)
> Mais puisque maintenant c'est une variable locale à fonca, on ne peut
> plus faire :
> if len(lst)<3
> puisqu'à ce moment là, lst n,'existe pas.
> J'aimerais donc pouvoir indiquer dans fonca, que la variable lst est
> celle définie dans fonc1.
> Je ne veux pas d'une variable locale à fonca, ni une variable globale à
> tout mon fichier (cf exemple ci-dessous)
> Une idée ?
> Le code suivant par exemple ;
> lst=[]
> def fonc1() :
> def fonca(v) :
> global lst if len(lst)<3 :
> lst=lst+[v]
> print(lst)
> return fonca
> marche comme je veux. Mais là, lst est globale. Je voudrais qu'elle
> reste locale à fonc1.
> Par avance merci.
Salut,
Je pense que tu devrais faire un lst.append(v) ou un lst.extend(v) -- ç a
dépend du type de v -- à la place lst=lst+[v].
Brice
On Thu, 27 Oct 2011 07:45:47 -0700, ll.snark wrote:
> Bonjour,
> Y a t il un équivalent du mot clé global, mais qui désigne une po rté
> plus petite (juste la portés ENGLOBANTE) ?
> Voici un exemple :
> def fonc1() :
> lst=[]
> def fonca(v) :
> if len(lst)<3 :
> lst.append(v)
> print(lst)
> return fonca
> Puis dans le shell, je fais :
>>>> f1=fonc1()
>>>> f1(1)
> [1]
>>>> f1(2)
> [1, 2]
>>>> f1(3)
> [1, 2, 3]
>>>> f1(4)
> [1, 2, 3]
> Tout marche comme prévu, la liste grandit à concurrence de 3 valeur s.
> Maintenant, je remplace lst.append(v) par lst=lst+[v], qui crée don c une
> nouvelle liste, qui va être référencée par lst.
> SI j'écris :
> def fonc1() :
> lst=[]
> def fonca(v) :
> if len(lst)<3 :
> lst=lst+[v]
> print(lst)
> return fonca
> alors ça ne marche plus :
>>>> f1=fonc1()
>>>> f1(1)
> Traceback (most recent call last):
> File "<pyshell#202>", line 1, in <module>
> f1(1)
> File "tmp.py", line 4, in fonca
> if len(lst)<3 :
> UnboundLocalError: local variable 'lst' referenced before assignment
> J'ai mis un peu de temps à piger pourquoi l'erreur était sur cette
> ligne. J'imagine que Python lit **en avance** le code de fonca, voit
> l'affectation, lst=lst+[v] et décide donc que lst est une variable
> locale (je suis pas super satisfait de mon explication.... si quelqu'un
> en a une autre, je prends)
> Mais puisque maintenant c'est une variable locale à fonca, on ne peut
> plus faire :
> if len(lst)<3
> puisqu'à ce moment là, lst n,'existe pas.
> J'aimerais donc pouvoir indiquer dans fonca, que la variable lst est
> celle définie dans fonc1.
> Je ne veux pas d'une variable locale à fonca, ni une variable globale à
> tout mon fichier (cf exemple ci-dessous)
> Une idée ?
> Le code suivant par exemple ;
> lst=[]
> def fonc1() :
> def fonca(v) :
> global lst if len(lst)<3 :
> lst=lst+[v]
> print(lst)
> return fonca
> marche comme je veux. Mais là, lst est globale. Je voudrais qu'elle
> reste locale à fonc1.
> Par avance merci.
Salut,
Je pense que tu devrais faire un lst.append(v) ou un lst.extend(v) -- ç a
dépend du type de v -- à la place lst=lst+[v].
Brice
On Thu, 27 Oct 2011 07:45:47 -0700, ll.snark wrote:
> Bonjour,
> Y a t il un équivalent du mot clé global, mais qui désigne une po rté
> plus petite (juste la portés ENGLOBANTE) ?
> Voici un exemple :
> def fonc1() :
> lst=[]
> def fonca(v) :
> if len(lst)<3 :
> lst.append(v)
> print(lst)
> return fonca
> Puis dans le shell, je fais :
>>>> f1=fonc1()
>>>> f1(1)
> [1]
>>>> f1(2)
> [1, 2]
>>>> f1(3)
> [1, 2, 3]
>>>> f1(4)
> [1, 2, 3]
> Tout marche comme prévu, la liste grandit à concurrence de 3 valeur s.
> Maintenant, je remplace lst.append(v) par lst=lst+[v], qui crée don c une
> nouvelle liste, qui va être référencée par lst.
> SI j'écris :
> def fonc1() :
> lst=[]
> def fonca(v) :
> if len(lst)<3 :
> lst=lst+[v]
> print(lst)
> return fonca
> alors ça ne marche plus :
>>>> f1=fonc1()
>>>> f1(1)
> Traceback (most recent call last):
> File "<pyshell#202>", line 1, in <module>
> f1(1)
> File "tmp.py", line 4, in fonca
> if len(lst)<3 :
> UnboundLocalError: local variable 'lst' referenced before assignment
> J'ai mis un peu de temps à piger pourquoi l'erreur était sur cette
> ligne. J'imagine que Python lit **en avance** le code de fonca, voit
> l'affectation, lst=lst+[v] et décide donc que lst est une variable
> locale (je suis pas super satisfait de mon explication.... si quelqu'un
> en a une autre, je prends)
> Mais puisque maintenant c'est une variable locale à fonca, on ne peut
> plus faire :
> if len(lst)<3
> puisqu'à ce moment là, lst n,'existe pas.
> J'aimerais donc pouvoir indiquer dans fonca, que la variable lst est
> celle définie dans fonc1.
> Je ne veux pas d'une variable locale à fonca, ni une variable globale à
> tout mon fichier (cf exemple ci-dessous)
> Une idée ?
> Le code suivant par exemple ;
> lst=[]
> def fonc1() :
> def fonca(v) :
> global lst if len(lst)<3 :
> lst=lst+[v]
> print(lst)
> return fonca
> marche comme je veux. Mais là, lst est globale. Je voudrais qu'elle
> reste locale à fonc1.
> Par avance merci.
Salut,
Je pense que tu devrais faire un lst.append(v) ou un lst.extend(v) -- ç a
dépend du type de v -- à la place lst=lst+[v].
Brice
def fonc1() :
lst=[]
def fonca(v) :
if len(lst)<3 :
lst.append(v)
print(lst)
return fonca
SI j'écris :
def fonc1() :
lst=[]
def fonca(v) :
if len(lst)<3 :
lst=lst+[v]
print(lst)
return fonca
alors ça ne marche plus :f1=fonc1()
f1(1)
Traceback (most recent call last):
File "<pyshell#202>", line 1, in <module>
f1(1)
File "tmp.py", line 4, in fonca
if len(lst)<3 :
UnboundLocalError: local variable 'lst' referenced before assignment
J'ai mis un peu de temps à piger pourquoi l'erreur était sur ce tte
ligne. J'imagine que Python lit **en avance** le code de fonca, voit
l'affectation, lst=lst+[v] et décide donc que lst est une variable
locale (je suis pas super satisfait de mon explication.... si
quelqu'un en a une autre, je prends)
Mais puisque maintenant c'est une variable locale à fonca, on ne peut
plus faire :
if len(lst)<3
puisqu'à ce moment là , lst n,'existe pas.
J'aimerais donc pouvoir indiquer dans fonca, que la variable lst est
celle définie dans fonc1.
Je ne veux pas d'une variable locale à fonca, ni une variable globale
à tout mon fichier (cf exemple ci-dessous)
def fonc1() :
lst=[]
def fonca(v) :
if len(lst)<3 :
lst.append(v)
print(lst)
return fonca
SI j'écris :
def fonc1() :
lst=[]
def fonca(v) :
if len(lst)<3 :
lst=lst+[v]
print(lst)
return fonca
alors ça ne marche plus :
f1=fonc1()
f1(1)
Traceback (most recent call last):
File "<pyshell#202>", line 1, in <module>
f1(1)
File "tmp.py", line 4, in fonca
if len(lst)<3 :
UnboundLocalError: local variable 'lst' referenced before assignment
J'ai mis un peu de temps à piger pourquoi l'erreur était sur ce tte
ligne. J'imagine que Python lit **en avance** le code de fonca, voit
l'affectation, lst=lst+[v] et décide donc que lst est une variable
locale (je suis pas super satisfait de mon explication.... si
quelqu'un en a une autre, je prends)
Mais puisque maintenant c'est une variable locale à fonca, on ne peut
plus faire :
if len(lst)<3
puisqu'à ce moment là , lst n,'existe pas.
J'aimerais donc pouvoir indiquer dans fonca, que la variable lst est
celle définie dans fonc1.
Je ne veux pas d'une variable locale à fonca, ni une variable globale
à tout mon fichier (cf exemple ci-dessous)
def fonc1() :
lst=[]
def fonca(v) :
if len(lst)<3 :
lst.append(v)
print(lst)
return fonca
SI j'écris :
def fonc1() :
lst=[]
def fonca(v) :
if len(lst)<3 :
lst=lst+[v]
print(lst)
return fonca
alors ça ne marche plus :f1=fonc1()
f1(1)
Traceback (most recent call last):
File "<pyshell#202>", line 1, in <module>
f1(1)
File "tmp.py", line 4, in fonca
if len(lst)<3 :
UnboundLocalError: local variable 'lst' referenced before assignment
J'ai mis un peu de temps à piger pourquoi l'erreur était sur ce tte
ligne. J'imagine que Python lit **en avance** le code de fonca, voit
l'affectation, lst=lst+[v] et décide donc que lst est une variable
locale (je suis pas super satisfait de mon explication.... si
quelqu'un en a une autre, je prends)
Mais puisque maintenant c'est une variable locale à fonca, on ne peut
plus faire :
if len(lst)<3
puisqu'à ce moment là , lst n,'existe pas.
J'aimerais donc pouvoir indiquer dans fonca, que la variable lst est
celle définie dans fonc1.
Je ne veux pas d'une variable locale à fonca, ni une variable globale
à tout mon fichier (cf exemple ci-dessous)
Effectivement, ça répond en partie à la question.
Il faudra que je vois si en faisant comme ça, je peux résoudre mon pb
de départ sur les décorateurs. MAis je suppose qu'entre une fonction
et une classe qui possède une
méthode __call__, il n'y a pas tant de différence que ça...
Merci pour la réponse en tous cas. Je suppose donc qu'il n'y a pas de
mot clé, un peu comme global, mais qui
désigne une portée plus petite ?
Je l'aurais sans doute vu dans la doc
ou dans des bouquin si ça avait été le cas, mais je trouve
que c'est bizarre.
Effectivement, ça répond en partie à la question.
Il faudra que je vois si en faisant comme ça, je peux résoudre mon pb
de départ sur les décorateurs. MAis je suppose qu'entre une fonction
et une classe qui possède une
méthode __call__, il n'y a pas tant de différence que ça...
Merci pour la réponse en tous cas. Je suppose donc qu'il n'y a pas de
mot clé, un peu comme global, mais qui
désigne une portée plus petite ?
Je l'aurais sans doute vu dans la doc
ou dans des bouquin si ça avait été le cas, mais je trouve
que c'est bizarre.
Effectivement, ça répond en partie à la question.
Il faudra que je vois si en faisant comme ça, je peux résoudre mon pb
de départ sur les décorateurs. MAis je suppose qu'entre une fonction
et une classe qui possède une
méthode __call__, il n'y a pas tant de différence que ça...
Merci pour la réponse en tous cas. Je suppose donc qu'il n'y a pas de
mot clé, un peu comme global, mais qui
désigne une portée plus petite ?
Je l'aurais sans doute vu dans la doc
ou dans des bouquin si ça avait été le cas, mais je trouve
que c'est bizarre.
C'est ce que j'ai mis dans le premier code proposé.
Je voudrais justement comprendre comment faire **sans ça**, c'est à
dire en **affectant** réellement
la variable lst plutôt qu'en **modifiant** l'objet.
Il s'agit plus de comprendre comment ça marche que de parvenir à
réaliser un prog particulier (l'exemple que je donne vient d'un
exemple sur les décorateurs que je n'avais pas bien compris, et que
j'ai simplifié, jusqu'à m'apercevoir du "pb" mentionné dans mon mail.
C'est ce que j'ai mis dans le premier code proposé.
Je voudrais justement comprendre comment faire **sans ça**, c'est à
dire en **affectant** réellement
la variable lst plutôt qu'en **modifiant** l'objet.
Il s'agit plus de comprendre comment ça marche que de parvenir à
réaliser un prog particulier (l'exemple que je donne vient d'un
exemple sur les décorateurs que je n'avais pas bien compris, et que
j'ai simplifié, jusqu'à m'apercevoir du "pb" mentionné dans mon mail.
C'est ce que j'ai mis dans le premier code proposé.
Je voudrais justement comprendre comment faire **sans ça**, c'est à
dire en **affectant** réellement
la variable lst plutôt qu'en **modifiant** l'objet.
Il s'agit plus de comprendre comment ça marche que de parvenir à
réaliser un prog particulier (l'exemple que je donne vient d'un
exemple sur les décorateurs que je n'avais pas bien compris, et que
j'ai simplifié, jusqu'à m'apercevoir du "pb" mentionné dans mon mail.
Le 28/10/2011 11:34, Alain Ketterlin a écrit :
Le 28/10/2011 11:34, Alain Ketterlin a écrit :
Le 28/10/2011 11:34, Alain Ketterlin a écrit :
Laurent Claessens writes:Le 28/10/2011 11:34, Alain Ketterlin a écrit :
[...]
J'ai beau chercher, je ne trouve pas ce que contient ton message, sinon
une citation difficile à déchiffrer du mien.
Laurent Claessens <moky.math@gmail.com> writes:
Le 28/10/2011 11:34, Alain Ketterlin a écrit :
[...]
J'ai beau chercher, je ne trouve pas ce que contient ton message, sinon
une citation difficile à déchiffrer du mien.
Laurent Claessens writes:Le 28/10/2011 11:34, Alain Ketterlin a écrit :
[...]
J'ai beau chercher, je ne trouve pas ce que contient ton message, sinon
une citation difficile à déchiffrer du mien.