On 8 avr, 20:15, Francois wrote:Pouvez vous me dire ce que vous voulez dire par "immutables" ? Qu'on ne
peut pas modifier ?
Oui.C'est ce à quoi j'ai pensé au départ. Mais j'ai
l'impression que ce n'est pas ça car les variables de type entiers ou
float sont modifiables.
Ah bon ?-)
Non, les entiers, les floats et les chaines (et les tuples mais c'est
un poil plus complexe) sont immutables - l'état d'un de ces objets est
équivalent à sa valeur, et cet état n'est pas (je répète : n'est pas)
modifiable. On ne peux pas faire:
b = 'allo'
b[0] = 'z'
On peut toujours, bien sûr, rebinder un nom pointant vers un objet
immutable
vers un autre objet, mais ce n'est absolument pas la même chose.
Les "variables" en Python ne sont pas des "conteneurs" (contrairement,
par exemple, au C). Ce sont des noms associés à des références sur des
objets. Donc, un même id() pour deux noms signifie que les deux noms
référencent le même objet.
). Existe-t-il une instruction pour avoir l'adresse mémoire
d'une variable ?
<mode="taquin">
Pour quelle définition de "variable" ? Le nom ? L'objet référencé par
le nom ? ou le couple formé par les deux ?-)
</mode>
On 8 avr, 20:15, Francois <mathsatta...@free.fr> wrote:
Pouvez vous me dire ce que vous voulez dire par "immutables" ? Qu'on ne
peut pas modifier ?
Oui.
C'est ce à quoi j'ai pensé au départ. Mais j'ai
l'impression que ce n'est pas ça car les variables de type entiers ou
float sont modifiables.
Ah bon ?-)
Non, les entiers, les floats et les chaines (et les tuples mais c'est
un poil plus complexe) sont immutables - l'état d'un de ces objets est
équivalent à sa valeur, et cet état n'est pas (je répète : n'est pas)
modifiable. On ne peux pas faire:
b = 'allo'
b[0] = 'z'
On peut toujours, bien sûr, rebinder un nom pointant vers un objet
immutable
vers un autre objet, mais ce n'est absolument pas la même chose.
Les "variables" en Python ne sont pas des "conteneurs" (contrairement,
par exemple, au C). Ce sont des noms associés à des références sur des
objets. Donc, un même id() pour deux noms signifie que les deux noms
référencent le même objet.
). Existe-t-il une instruction pour avoir l'adresse mémoire
d'une variable ?
<mode="taquin">
Pour quelle définition de "variable" ? Le nom ? L'objet référencé par
le nom ? ou le couple formé par les deux ?-)
</mode>
On 8 avr, 20:15, Francois wrote:Pouvez vous me dire ce que vous voulez dire par "immutables" ? Qu'on ne
peut pas modifier ?
Oui.C'est ce à quoi j'ai pensé au départ. Mais j'ai
l'impression que ce n'est pas ça car les variables de type entiers ou
float sont modifiables.
Ah bon ?-)
Non, les entiers, les floats et les chaines (et les tuples mais c'est
un poil plus complexe) sont immutables - l'état d'un de ces objets est
équivalent à sa valeur, et cet état n'est pas (je répète : n'est pas)
modifiable. On ne peux pas faire:
b = 'allo'
b[0] = 'z'
On peut toujours, bien sûr, rebinder un nom pointant vers un objet
immutable
vers un autre objet, mais ce n'est absolument pas la même chose.
Les "variables" en Python ne sont pas des "conteneurs" (contrairement,
par exemple, au C). Ce sont des noms associés à des références sur des
objets. Donc, un même id() pour deux noms signifie que les deux noms
référencent le même objet.
). Existe-t-il une instruction pour avoir l'adresse mémoire
d'une variable ?
<mode="taquin">
Pour quelle définition de "variable" ? Le nom ? L'objet référencé par
le nom ? ou le couple formé par les deux ?-)
</mode>
Merci beaucoup pour la réponse Amaury. Comme souvent, ça m'amène à
d'autres questions.Pouvez vous me dire ce que vous voulez dire par "immutables" ? Qu'on
ne peut pas modifier ? C'est ce à quoi j'ai pensé au départ. Mais j'ai
l'impression que ce n'est pas ça car les variables de type entiers ou
float sont modifiables.
A mon tour:
Quand on fait "a=3" suivi de "a=4", on n'a pas changé le 3 en 4:
on a simplement déplacé la variable a pour qu'elle indique une nouve lle
valeur.
Tiens c'est marrent, moi j'aurais pas dit ça comme ça. J'aurais plut ôt
dit «Avec a=4 (juste après a=3), la zone mémoire correspondant à la
variable a (qui contenait en binaire l'entier 3) est modifiée pour
contenir le code binaire de l'entier 4 ».
Pour moi, il n'y aurait pas de
«déplacement» de variable comme tu le dis, mais réécriture de so n
contenu, comme il me semble c'est le cas dans de nombreux langages (sans
aucune certitude).
Mais j'ai l'impression que c'est toi qui as raison
Par contre, à partir de "a = [1,2,3]", si on fait "a[0] = 4",
l'affectation s'applique sur l'objet indiqué par a, et le modifie. La
preuve:a = [1, 2, 3]
b = a
print b
[1, 2, 3]a[0] = 4
print b
[4, 2, 3] # b change aussi!
C'est que a et b utilisent la même liste, et c'est elle que l'on a
modifié. Une liste est un objet mutable.
En python, les nombres (int, float, complex) et les chaines (str,
unicode) ne sont pas mutables: il n'y a aucune opération qui permet de
les modifier. C'est comme en Java, mais pas comme en C++.
La plupart des autres objets sont mutables; et je laisse à d'autres le
soin d'expliquer le cas du 'tuple'.
Ok pour tout ça. Pas la peine de m'expliquer le 'tuple', j'ai cru
comprendre qu'il n'était pas "mutable".
C'est étrange cette vision je
trouve. Une liste de int, sachant que les int ne sont pas mutables
(d'après ce que j'ai cru comprendre), est quant à elle "mutable" !
Autrement dit, une liste de trucs pas "mutables" peut donner un bidul
"mutable" ? Ça fait vraiment bizarre je trouve.
Je ne vais pas tarder à poster un fil sur ce genre de considération s,
mais je profite de cette remarque pour poser la question suivante :
id() donne un identifiant d'une variable. Un même id() pour deux
variable signifie que le contenu des variable est le même objet
physique dans la mémoire (si j'ai bien compris). Chez moi, id() ne
donne pas une adresse mémoire (il me semble en tout cas car j'ai un
truc du genre "3079857356L"). Existe-t-il une instruction pour avoir
l'adresse mémoire d'une variable ?
Une adresse mémoire c'est un nombre aussi... Ou bien préfères-tu
l'afficher en base 16?print "0x%08x" % id(a)
0x00a659e0
Ok. Oui je préfère le voir en base 16. Ça me donne plus l'impression que
j'ai une adresse (qui est un nombre, on est bien d'accord). Donc, si je
comprends bien, id(a) c'est vraiment l'adresse mémoire du contenu de a.
Et là, il y a un truc qui m'étonne beaucoup. C'est ce code :
a = 4
print "L'adresse de a est : 0x%08x" %id(a)
# ce qui donne "L'adresse de a est : 0x0816df14"
a = 5
print "L'adresse de a est : 0x%08x" %id(a)
# ce qui donne "L'adresse de a est : 0x0816df08"
L'adresse de a aurait changer.
La vache ! Ça me scie ! Comme tu disais,
la variable a aurait été «déplacée», Python modifie l'adresse de a pour
qu'elle «pointe» vers la valeur 5.
Mais la valeur 4
n'a pas été effacée,
elle se ballade quelque part dans la mémoire.
Ça me fait drôle qu'une
variable toute gentille comme a change d'adresse juste après a=5. C'es t
possible d'avoir des explications ?
Merci beaucoup pour la réponse Amaury. Comme souvent, ça m'amène à
d'autres questions.
Pouvez vous me dire ce que vous voulez dire par "immutables" ? Qu'on
ne peut pas modifier ? C'est ce à quoi j'ai pensé au départ. Mais j'ai
l'impression que ce n'est pas ça car les variables de type entiers ou
float sont modifiables.
A mon tour:
Quand on fait "a=3" suivi de "a=4", on n'a pas changé le 3 en 4:
on a simplement déplacé la variable a pour qu'elle indique une nouve lle
valeur.
Tiens c'est marrent, moi j'aurais pas dit ça comme ça. J'aurais plut ôt
dit «Avec a=4 (juste après a=3), la zone mémoire correspondant à la
variable a (qui contenait en binaire l'entier 3) est modifiée pour
contenir le code binaire de l'entier 4 ».
Pour moi, il n'y aurait pas de
«déplacement» de variable comme tu le dis, mais réécriture de so n
contenu, comme il me semble c'est le cas dans de nombreux langages (sans
aucune certitude).
Mais j'ai l'impression que c'est toi qui as raison
Par contre, à partir de "a = [1,2,3]", si on fait "a[0] = 4",
l'affectation s'applique sur l'objet indiqué par a, et le modifie. La
preuve:
a = [1, 2, 3]
b = a
print b
[1, 2, 3]
a[0] = 4
print b
[4, 2, 3] # b change aussi!
C'est que a et b utilisent la même liste, et c'est elle que l'on a
modifié. Une liste est un objet mutable.
En python, les nombres (int, float, complex) et les chaines (str,
unicode) ne sont pas mutables: il n'y a aucune opération qui permet de
les modifier. C'est comme en Java, mais pas comme en C++.
La plupart des autres objets sont mutables; et je laisse à d'autres le
soin d'expliquer le cas du 'tuple'.
Ok pour tout ça. Pas la peine de m'expliquer le 'tuple', j'ai cru
comprendre qu'il n'était pas "mutable".
C'est étrange cette vision je
trouve. Une liste de int, sachant que les int ne sont pas mutables
(d'après ce que j'ai cru comprendre), est quant à elle "mutable" !
Autrement dit, une liste de trucs pas "mutables" peut donner un bidul
"mutable" ? Ça fait vraiment bizarre je trouve.
Je ne vais pas tarder à poster un fil sur ce genre de considération s,
mais je profite de cette remarque pour poser la question suivante :
id() donne un identifiant d'une variable. Un même id() pour deux
variable signifie que le contenu des variable est le même objet
physique dans la mémoire (si j'ai bien compris). Chez moi, id() ne
donne pas une adresse mémoire (il me semble en tout cas car j'ai un
truc du genre "3079857356L"). Existe-t-il une instruction pour avoir
l'adresse mémoire d'une variable ?
Une adresse mémoire c'est un nombre aussi... Ou bien préfères-tu
l'afficher en base 16?
print "0x%08x" % id(a)
0x00a659e0
Ok. Oui je préfère le voir en base 16. Ça me donne plus l'impression que
j'ai une adresse (qui est un nombre, on est bien d'accord). Donc, si je
comprends bien, id(a) c'est vraiment l'adresse mémoire du contenu de a.
Et là, il y a un truc qui m'étonne beaucoup. C'est ce code :
a = 4
print "L'adresse de a est : 0x%08x" %id(a)
# ce qui donne "L'adresse de a est : 0x0816df14"
a = 5
print "L'adresse de a est : 0x%08x" %id(a)
# ce qui donne "L'adresse de a est : 0x0816df08"
L'adresse de a aurait changer.
La vache ! Ça me scie ! Comme tu disais,
la variable a aurait été «déplacée», Python modifie l'adresse de a pour
qu'elle «pointe» vers la valeur 5.
Mais la valeur 4
n'a pas été effacée,
elle se ballade quelque part dans la mémoire.
Ça me fait drôle qu'une
variable toute gentille comme a change d'adresse juste après a=5. C'es t
possible d'avoir des explications ?
Merci beaucoup pour la réponse Amaury. Comme souvent, ça m'amène à
d'autres questions.Pouvez vous me dire ce que vous voulez dire par "immutables" ? Qu'on
ne peut pas modifier ? C'est ce à quoi j'ai pensé au départ. Mais j'ai
l'impression que ce n'est pas ça car les variables de type entiers ou
float sont modifiables.
A mon tour:
Quand on fait "a=3" suivi de "a=4", on n'a pas changé le 3 en 4:
on a simplement déplacé la variable a pour qu'elle indique une nouve lle
valeur.
Tiens c'est marrent, moi j'aurais pas dit ça comme ça. J'aurais plut ôt
dit «Avec a=4 (juste après a=3), la zone mémoire correspondant à la
variable a (qui contenait en binaire l'entier 3) est modifiée pour
contenir le code binaire de l'entier 4 ».
Pour moi, il n'y aurait pas de
«déplacement» de variable comme tu le dis, mais réécriture de so n
contenu, comme il me semble c'est le cas dans de nombreux langages (sans
aucune certitude).
Mais j'ai l'impression que c'est toi qui as raison
Par contre, à partir de "a = [1,2,3]", si on fait "a[0] = 4",
l'affectation s'applique sur l'objet indiqué par a, et le modifie. La
preuve:a = [1, 2, 3]
b = a
print b
[1, 2, 3]a[0] = 4
print b
[4, 2, 3] # b change aussi!
C'est que a et b utilisent la même liste, et c'est elle que l'on a
modifié. Une liste est un objet mutable.
En python, les nombres (int, float, complex) et les chaines (str,
unicode) ne sont pas mutables: il n'y a aucune opération qui permet de
les modifier. C'est comme en Java, mais pas comme en C++.
La plupart des autres objets sont mutables; et je laisse à d'autres le
soin d'expliquer le cas du 'tuple'.
Ok pour tout ça. Pas la peine de m'expliquer le 'tuple', j'ai cru
comprendre qu'il n'était pas "mutable".
C'est étrange cette vision je
trouve. Une liste de int, sachant que les int ne sont pas mutables
(d'après ce que j'ai cru comprendre), est quant à elle "mutable" !
Autrement dit, une liste de trucs pas "mutables" peut donner un bidul
"mutable" ? Ça fait vraiment bizarre je trouve.
Je ne vais pas tarder à poster un fil sur ce genre de considération s,
mais je profite de cette remarque pour poser la question suivante :
id() donne un identifiant d'une variable. Un même id() pour deux
variable signifie que le contenu des variable est le même objet
physique dans la mémoire (si j'ai bien compris). Chez moi, id() ne
donne pas une adresse mémoire (il me semble en tout cas car j'ai un
truc du genre "3079857356L"). Existe-t-il une instruction pour avoir
l'adresse mémoire d'une variable ?
Une adresse mémoire c'est un nombre aussi... Ou bien préfères-tu
l'afficher en base 16?print "0x%08x" % id(a)
0x00a659e0
Ok. Oui je préfère le voir en base 16. Ça me donne plus l'impression que
j'ai une adresse (qui est un nombre, on est bien d'accord). Donc, si je
comprends bien, id(a) c'est vraiment l'adresse mémoire du contenu de a.
Et là, il y a un truc qui m'étonne beaucoup. C'est ce code :
a = 4
print "L'adresse de a est : 0x%08x" %id(a)
# ce qui donne "L'adresse de a est : 0x0816df14"
a = 5
print "L'adresse de a est : 0x%08x" %id(a)
# ce qui donne "L'adresse de a est : 0x0816df08"
L'adresse de a aurait changer.
La vache ! Ça me scie ! Comme tu disais,
la variable a aurait été «déplacée», Python modifie l'adresse de a pour
qu'elle «pointe» vers la valeur 5.
Mais la valeur 4
n'a pas été effacée,
elle se ballade quelque part dans la mémoire.
Ça me fait drôle qu'une
variable toute gentille comme a change d'adresse juste après a=5. C'es t
possible d'avoir des explications ?
On 8 avr, 20:15, Francois wrote:Pouvez vous me dire ce que vous voulez dire par "immutables" ? Qu'on ne
peut pas modifier ?
Oui.C'est ce à quoi j'ai pensé au départ. Mais j'ai
l'impression que ce n'est pas ça car les variables de type entiers ou
float sont modifiables.
Ah bon ?-)
Non, les entiers, les floats et les chaines (et les tuples mais c'est
un poil plus complexe) sont immutables - l'état d'un de ces objets est
équivalent à sa valeur, et cet état n'est pas (je répète : n'e st pas)
modifiable. On ne peux pas faire:
b = 'allo'
b[0] = 'z'
On peut toujours, bien sûr, rebinder un nom pointant vers un objet
immutable
vers un autre objet, mais ce n'est absolument pas la même chose.
Donc quand je fais :
a = 4
a = 5
je n'ai pas modifié 4, j'ai "rebindé" (je ne connais pas ce terme)
la
variable a. Je tente une définition de "rebinder" : faire pointer une
variable à un nouvel endroit de la mémoire
(une contiendra 5 dans notre
exemple). C'est ça ?
Mais alors, la zone où il y a le code binaire de 4 (crée par a=4) ne
sera jamais réécrite un jour (puisque non modifiable) ?
Les "variables" en Python ne sont pas des "conteneurs" (contrairement,
par exemple, au C). Ce sont des noms associés à des références s ur des
objets. Donc, un même id() pour deux noms signifie que les deux noms
référencent le même objet.
Voilà. C'est pour ça que je suis perdu. Parce que c'est pas comme en C
(que je connais pas très bien d'ailleurs, mais qui est le seul langage
que je connaisse un peu pour l'instant). Au moins, je comprends pourquoi
je suis perdu.
En Python, si j'ai bien compris (n'hésitez pas à me rectifier) :
- Un nom de variable est stocké dans la mémoire.
C'est une différence
avec le C, je crois bien.
Ce nom est-il stocker dans la mémoire RAM ?
- Le nom d'une variable est associé à une référence sur un objet.
Une 'variable' est l'association d'un nom et d'une référence sur un
Ok. Là
aussi, c'est pas comme le C où une variable est, si je ne dis pas de
bêtises, l'objet lui-même.
Quand vous parlez de "nom de variable associé
à une référence", la variable est-elle en fait une sorte de pointeur
comme un pointeur en C ?
- Par contre, comme en C, l'objet à une adresse mémoire bien sûr, un
type (c'est la taille de la mémoire allouée et la manière dont le
contenu est interprété) et une valeur.
On 8 avr, 20:15, Francois <mathsatta...@free.fr> wrote:
Pouvez vous me dire ce que vous voulez dire par "immutables" ? Qu'on ne
peut pas modifier ?
Oui.
C'est ce à quoi j'ai pensé au départ. Mais j'ai
l'impression que ce n'est pas ça car les variables de type entiers ou
float sont modifiables.
Ah bon ?-)
Non, les entiers, les floats et les chaines (et les tuples mais c'est
un poil plus complexe) sont immutables - l'état d'un de ces objets est
équivalent à sa valeur, et cet état n'est pas (je répète : n'e st pas)
modifiable. On ne peux pas faire:
b = 'allo'
b[0] = 'z'
On peut toujours, bien sûr, rebinder un nom pointant vers un objet
immutable
vers un autre objet, mais ce n'est absolument pas la même chose.
Donc quand je fais :
a = 4
a = 5
je n'ai pas modifié 4, j'ai "rebindé" (je ne connais pas ce terme)
la
variable a. Je tente une définition de "rebinder" : faire pointer une
variable à un nouvel endroit de la mémoire
(une contiendra 5 dans notre
exemple). C'est ça ?
Mais alors, la zone où il y a le code binaire de 4 (crée par a=4) ne
sera jamais réécrite un jour (puisque non modifiable) ?
Les "variables" en Python ne sont pas des "conteneurs" (contrairement,
par exemple, au C). Ce sont des noms associés à des références s ur des
objets. Donc, un même id() pour deux noms signifie que les deux noms
référencent le même objet.
Voilà. C'est pour ça que je suis perdu. Parce que c'est pas comme en C
(que je connais pas très bien d'ailleurs, mais qui est le seul langage
que je connaisse un peu pour l'instant). Au moins, je comprends pourquoi
je suis perdu.
En Python, si j'ai bien compris (n'hésitez pas à me rectifier) :
- Un nom de variable est stocké dans la mémoire.
C'est une différence
avec le C, je crois bien.
Ce nom est-il stocker dans la mémoire RAM ?
- Le nom d'une variable est associé à une référence sur un objet.
Une 'variable' est l'association d'un nom et d'une référence sur un
Ok. Là
aussi, c'est pas comme le C où une variable est, si je ne dis pas de
bêtises, l'objet lui-même.
Quand vous parlez de "nom de variable associé
à une référence", la variable est-elle en fait une sorte de pointeur
comme un pointeur en C ?
- Par contre, comme en C, l'objet à une adresse mémoire bien sûr, un
type (c'est la taille de la mémoire allouée et la manière dont le
contenu est interprété) et une valeur.
On 8 avr, 20:15, Francois wrote:Pouvez vous me dire ce que vous voulez dire par "immutables" ? Qu'on ne
peut pas modifier ?
Oui.C'est ce à quoi j'ai pensé au départ. Mais j'ai
l'impression que ce n'est pas ça car les variables de type entiers ou
float sont modifiables.
Ah bon ?-)
Non, les entiers, les floats et les chaines (et les tuples mais c'est
un poil plus complexe) sont immutables - l'état d'un de ces objets est
équivalent à sa valeur, et cet état n'est pas (je répète : n'e st pas)
modifiable. On ne peux pas faire:
b = 'allo'
b[0] = 'z'
On peut toujours, bien sûr, rebinder un nom pointant vers un objet
immutable
vers un autre objet, mais ce n'est absolument pas la même chose.
Donc quand je fais :
a = 4
a = 5
je n'ai pas modifié 4, j'ai "rebindé" (je ne connais pas ce terme)
la
variable a. Je tente une définition de "rebinder" : faire pointer une
variable à un nouvel endroit de la mémoire
(une contiendra 5 dans notre
exemple). C'est ça ?
Mais alors, la zone où il y a le code binaire de 4 (crée par a=4) ne
sera jamais réécrite un jour (puisque non modifiable) ?
Les "variables" en Python ne sont pas des "conteneurs" (contrairement,
par exemple, au C). Ce sont des noms associés à des références s ur des
objets. Donc, un même id() pour deux noms signifie que les deux noms
référencent le même objet.
Voilà. C'est pour ça que je suis perdu. Parce que c'est pas comme en C
(que je connais pas très bien d'ailleurs, mais qui est le seul langage
que je connaisse un peu pour l'instant). Au moins, je comprends pourquoi
je suis perdu.
En Python, si j'ai bien compris (n'hésitez pas à me rectifier) :
- Un nom de variable est stocké dans la mémoire.
C'est une différence
avec le C, je crois bien.
Ce nom est-il stocker dans la mémoire RAM ?
- Le nom d'une variable est associé à une référence sur un objet.
Une 'variable' est l'association d'un nom et d'une référence sur un
Ok. Là
aussi, c'est pas comme le C où une variable est, si je ne dis pas de
bêtises, l'objet lui-même.
Quand vous parlez de "nom de variable associé
à une référence", la variable est-elle en fait une sorte de pointeur
comme un pointeur en C ?
- Par contre, comme en C, l'objet à une adresse mémoire bien sûr, un
type (c'est la taille de la mémoire allouée et la manière dont le
contenu est interprété) et une valeur.
FameuxManuel(tm):
"""
This version does not copy types like module, class, function, method,
nor stack trace, stack frame, nor file, socket, window, nor array,
nor any similar types.
FameuxManuel(tm):
"""
This version does not copy types like module, class, function, method,
nor stack trace, stack frame, nor file, socket, window, nor array,
nor any similar types.
FameuxManuel(tm):
"""
This version does not copy types like module, class, function, method,
nor stack trace, stack frame, nor file, socket, window, nor array,
nor any similar types.
Bonsoir !FameuxManuel(tm):
"""
This version does not copy types like module, class, function, method,
nor stack trace, stack frame, nor file, socket, window, nor array,
nor any similar types.
Moi, j'avais trouvé ce texte :
dans (5.17 copy -- Shallow and deep copy operations) :
This module does not copy types like module, method, stack trace, stack
frame, file, socket, window, array, or any similar types. It does
``copy'' functions and classes (shallow and deeply), by returning the
original object unchanged; this is compatible with the way these are
treated by the pickle module. Changed in version 2.5: Added copying
functions.
La dernière phrase m'avait incité à penser que le copie de fonctions
était possible en Python 2.5...
C'est assez curieux, cette différence de documentation...
Néanmoins, il est précisé que, pour les fonctions, c'est l'original qui
est retourné. Mais, je trouve ambigü que le paragraphe soit suffixé avec
"Changed in version 2.5... "
Pour les decorators. Teste ces deux morceaux de code :
def deco(f):
print f.__name__
return f
@deco
def func(): pass
print "AAA"
func()
def deco(f):
print f.__name__
return f
def func(): pass
print "AAA"
deco(func)()
Si j'ai bien compris ton propos, ils devraient donner le même résultat .
Or, ce n'est pas le cas.
Bonsoir !
FameuxManuel(tm):
"""
This version does not copy types like module, class, function, method,
nor stack trace, stack frame, nor file, socket, window, nor array,
nor any similar types.
Moi, j'avais trouvé ce texte :
dans (5.17 copy -- Shallow and deep copy operations) :
This module does not copy types like module, method, stack trace, stack
frame, file, socket, window, array, or any similar types. It does
``copy'' functions and classes (shallow and deeply), by returning the
original object unchanged; this is compatible with the way these are
treated by the pickle module. Changed in version 2.5: Added copying
functions.
La dernière phrase m'avait incité à penser que le copie de fonctions
était possible en Python 2.5...
C'est assez curieux, cette différence de documentation...
Néanmoins, il est précisé que, pour les fonctions, c'est l'original qui
est retourné. Mais, je trouve ambigü que le paragraphe soit suffixé avec
"Changed in version 2.5... "
Pour les decorators. Teste ces deux morceaux de code :
def deco(f):
print f.__name__
return f
@deco
def func(): pass
print "AAA"
func()
def deco(f):
print f.__name__
return f
def func(): pass
print "AAA"
deco(func)()
Si j'ai bien compris ton propos, ils devraient donner le même résultat .
Or, ce n'est pas le cas.
Bonsoir !FameuxManuel(tm):
"""
This version does not copy types like module, class, function, method,
nor stack trace, stack frame, nor file, socket, window, nor array,
nor any similar types.
Moi, j'avais trouvé ce texte :
dans (5.17 copy -- Shallow and deep copy operations) :
This module does not copy types like module, method, stack trace, stack
frame, file, socket, window, array, or any similar types. It does
``copy'' functions and classes (shallow and deeply), by returning the
original object unchanged; this is compatible with the way these are
treated by the pickle module. Changed in version 2.5: Added copying
functions.
La dernière phrase m'avait incité à penser que le copie de fonctions
était possible en Python 2.5...
C'est assez curieux, cette différence de documentation...
Néanmoins, il est précisé que, pour les fonctions, c'est l'original qui
est retourné. Mais, je trouve ambigü que le paragraphe soit suffixé avec
"Changed in version 2.5... "
Pour les decorators. Teste ces deux morceaux de code :
def deco(f):
print f.__name__
return f
@deco
def func(): pass
print "AAA"
func()
def deco(f):
print f.__name__
return f
def func(): pass
print "AAA"
deco(func)()
Si j'ai bien compris ton propos, ils devraient donner le même résultat .
Or, ce n'est pas le cas.
Et ça ne nous dit pas non plus pourquoi tu veux cloner une fonction
Et ça ne nous dit pas non plus pourquoi tu veux cloner une fonction
Et ça ne nous dit pas non plus pourquoi tu veux cloner une fonction
Salut !Et ça ne nous dit pas non plus pourquoi tu veux cloner une fonction
Deux explications :
1) Je trouve que les fonctions, c'est (aussi) un moyen (un objet) très
pratique de créer des singletons.
Je les utilise donc (aussi) pour ça.
Mais, dans quelques cas, ça me serait pratique d'avoir plusieurs
instances de ces objets (ça revient à faire du prototypage).
Voilà pour l'explication sérieuse (?).
2) j'ai la fonction suivante :
def Dolly( cri='Bêêê bêêêh !')
parler( cri)
Or, j'ai entendu dire que les écossais avaient réussi à cloner Dolly.
Pourquoi pas moi ?
Salut !
Et ça ne nous dit pas non plus pourquoi tu veux cloner une fonction
Deux explications :
1) Je trouve que les fonctions, c'est (aussi) un moyen (un objet) très
pratique de créer des singletons.
Je les utilise donc (aussi) pour ça.
Mais, dans quelques cas, ça me serait pratique d'avoir plusieurs
instances de ces objets (ça revient à faire du prototypage).
Voilà pour l'explication sérieuse (?).
2) j'ai la fonction suivante :
def Dolly( cri='Bêêê bêêêh !')
parler( cri)
Or, j'ai entendu dire que les écossais avaient réussi à cloner Dolly.
Pourquoi pas moi ?
Salut !Et ça ne nous dit pas non plus pourquoi tu veux cloner une fonction
Deux explications :
1) Je trouve que les fonctions, c'est (aussi) un moyen (un objet) très
pratique de créer des singletons.
Je les utilise donc (aussi) pour ça.
Mais, dans quelques cas, ça me serait pratique d'avoir plusieurs
instances de ces objets (ça revient à faire du prototypage).
Voilà pour l'explication sérieuse (?).
2) j'ai la fonction suivante :
def Dolly( cri='Bêêê bêêêh !')
parler( cri)
Or, j'ai entendu dire que les écossais avaient réussi à cloner Dolly.
Pourquoi pas moi ?