CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Des mages noirs en python ?

Pseudo supprimé
Pseudo supprimé 30 décembre 2020 à 14:17:12

Quelqu'un peut m'expliquer pourquoi cette différence entre les exemples 1 et 3 ?

https://image.noelshack.com/fichiers/2020/53/3/1609334201-signal-2020-12-29-210247.png

Pseudo supprimé
Pseudo supprimé 30 décembre 2020 à 14:51:53

Eupe pour les devs.

PermaAVie17
PermaAVie17
Niveau 5
30 décembre 2020 à 14:52:56

dev js et pas compris non plus :(

PermaAVie17
PermaAVie17
Niveau 5
30 décembre 2020 à 14:53:38

peut-être car 1. n'est pas un chiffre flottant donc ça casse le code

Pseudo supprimé
Pseudo supprimé 30 décembre 2020 à 14:57:24

Le 30 décembre 2020 à 14:54:32 lechiendelop a écrit :
On ne va pas faire tes devoirs.

Eupe pour les devs.

Je suis le prof.

Pseudo supprimé
Pseudo supprimé 30 décembre 2020 à 15:01:27

L'operateur is est un peu tricky. Je te renvois ici t'auras toutes les infos dont t'as besoin : https://dbader.org/blog/difference-between-is-and-equals-in-python

Pseudo supprimé
Pseudo supprimé 30 décembre 2020 à 15:01:51

Parce que quand tu crées un integer dans une certaine plage (je sais plus les bornes mais ça doit aller jusqu'à 256), en fait Python te renvoie une réf vers un tableau préalloué (sans doute pour des raisons de perf). Donc a et b pointent vers la mm zone mémoire dans le cas 1. Ce qui n'est pas le cas 3 où a et b pointent vers deux zones mémoires différentes.

Message édité le 30 décembre 2020 à 15:02:30 par Pseudo supprimé
Pseudo supprimé
Pseudo supprimé 30 décembre 2020 à 15:05:43

Le lien répond pas vraiment à la question. J'ai bien compris que is compare les objets référencées par des variables. Ma question est pourquoi l'interpréteur python créé deux objets distincts pour des flottants et un seul pour des entiers.

Pseudo supprimé
Pseudo supprimé 30 décembre 2020 à 15:07:04

Le 30 décembre 2020 à 15:01:51 JesusKrist a écrit :
Parce que quand tu crées un integer dans une certaine plage (je sais plus les bornes mais ça doit aller jusqu'à 256), en fait Python te renvoie une réf vers un tableau préalloué (sans doute pour des raisons de perf). Donc a et b pointent vers la mm zone mémoire dans le cas 1. Ce qui n'est pas le cas 3 où a et b pointent vers deux zones mémoires différentes.

Ok. Tu as un lien qui explicite ça ?

Pseudo supprimé
Pseudo supprimé 30 décembre 2020 à 15:09:55

The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just get back a reference to the existing object.

https://docs.python.org/3/c-api/long.html

Sans doute car ces entiers sont souvent utilisés dans les programmes. C'est sans doute plus rapide à l'exécution que devoir lire des entiers en zone mémoire éparpillées.

Message édité le 30 décembre 2020 à 15:10:19 par Pseudo supprimé
Pseudo supprimé
Pseudo supprimé 30 décembre 2020 à 15:13:41

Le 30 décembre 2020 à 15:09:55 JesusKrist a écrit :

The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just get back a reference to the existing object.

https://docs.python.org/3/c-api/long.html

Sans doute car ces entiers sont souvent utilisés dans les programmes. C'est sans doute plus rapide à l'exécution que devoir lire des entiers en zone mémoire éparpillées.

Cimer clé. Je suis tombé sur un autre contre-exemple un peu plus bas que cette page. C'est un bordel ce truc.
https://stackoverflow.com/questions/15996984/why-id-function-behaves-differently-with-integer-and-float

PUBG
PUBG
Niveau 10
30 décembre 2020 à 15:15:50

Le 30 décembre 2020 à 15:13:41 flanders42 a écrit :

Le 30 décembre 2020 à 15:09:55 JesusKrist a écrit :

The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just get back a reference to the existing object.

https://docs.python.org/3/c-api/long.html

Sans doute car ces entiers sont souvent utilisés dans les programmes. C'est sans doute plus rapide à l'exécution que devoir lire des entiers en zone mémoire éparpillées.

Cimer clé. Je suis tombé sur un autre contre-exemple un peu plus bas que cette page. C'est un bordel ce truc.
https://stackoverflow.com/questions/15996984/why-id-function-behaves-differently-with-integer-and-float

Bof non, t'as juste à retenir que le is fonctionne uniquement pour des petits entiers.

AtomeVengeur
AtomeVengeur
Niveau 26
30 décembre 2020 à 15:17:54

"is" n'est pas fait pour comparer float tout simplement

AtomeVengeur
AtomeVengeur
Niveau 26
30 décembre 2020 à 15:19:22

et encore python s'en sort pas mal, si t'as jamais fais de JS tu n'es pas prêt pour ce qu'il t'attend :hap:

wxbougnadire
wxbougnadire
Niveau 28
30 décembre 2020 à 15:25:51

Le 30 décembre 2020 à 15:17:54 AtomeVengeur a écrit :
"is" n'est pas fait pour comparer float tout simplement

n'importe quoi, un khey a deja donné la réponse t'aurait pu éviter de t'afficher bêtement

Pseudo supprimé
Pseudo supprimé 30 décembre 2020 à 15:26:10

Le 30 décembre 2020 à 15:17:54 AtomeVengeur a écrit :
"is" n'est pas fait pour comparer float tout simplement

Le programme d'informatique que je dois enseigner est plus explicite : pas de test d'égalité entre deux flottants. Juste égalité à epsilon près.

AtomeVengeur
AtomeVengeur
Niveau 26
30 décembre 2020 à 15:30:13

Le 30 décembre 2020 à 15:25:51 wxbougnadire a écrit :

Le 30 décembre 2020 à 15:17:54 AtomeVengeur a écrit :
"is" n'est pas fait pour comparer float tout simplement

n'importe quoi, un khey a deja donné la réponse t'aurait pu éviter de t'afficher bêtement

Donc j'ai tord ?
Si j'ai tord, alors tu peux comparer deux flottants avec "is" ?
Vas-y on te regarde :hap:

"is" compare les références, ce n'est pas un test d'égalité. Il y a l'équivalent dans tous les langages

Message édité le 30 décembre 2020 à 15:32:21 par AtomeVengeur
Azerban
Azerban
Niveau 16
30 décembre 2020 à 15:50:57

Avec les flottants on a aussi des petites surprises :)

>>> 1/3 + 1/3 + 1/3 == 3                                                                            
False

Mais ce n'est pas dû à Python mais à la manière dont sont représentés les nombres en binaire.

Sinon is ne compare pas les objets mais les références vers ces objets. Tu peux connaître les références en faisant id(object).

a = 256
b = 256
print(id(a), id(b), id(a) == id(b))
a = 257
b = 257
print(id(a), id(b), id(a) == id(b))

Retourne:

10922656 10922656 True
140356704355696 140356704355472 False
Pseudo supprimé
Pseudo supprimé 30 décembre 2020 à 16:23:38

Le 30 décembre 2020 à 15:50:57 Azerban a écrit :
Avec les flottants on a aussi des petites surprises :)

>>> 1/3 + 1/3 + 1/3 == 3                                                                            
False

Mais ce n'est pas dû à Python mais à la manière dont sont représentés les nombres en binaire.

Sinon is ne compare pas les objets mais les références vers ces objets. Tu peux connaître les références en faisant id(object).

a = 256
b = 256
print(id(a), id(b), id(a) == id(b))
a = 257
b = 257
print(id(a), id(b), id(a) == id(b))

Retourne:

10922656 10922656 True
140356704355696 140356704355472 False

Je suis au point sur IEEE-754. Mais ton dernier exemple est sympa en guise d'illustration.

Azerban
Azerban
Niveau 16
01 janvier 2021 à 10:43:39

Mon exemple pour tester l'égalité entre les floats était foireux, je viens de m'en rendre compte. Je voulais dire:

>>> x = 0.1 + 0.1 + 0.1
>>> y = 0.3
>>> x == y

False
Sous forums
  • Religion
La vidéo du moment