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

[python] Type hints: Exprimer notion de "convertissable en int"

[Black_Spirit]
[Black_Spirit]
Niveau 19
29 juillet 2021 à 12:18:11

Hello tout le monde,

J'ai dernièrement été amené à utiliser les type hints et MyPy pour rendre la base de code plus "résiliente" aux erreurs.

Par curiosité, il y a une notion que j'aimerais bien exprimer avec les types hints mais je ne suis pas sûr de savoir comment faire.


def process(val: Union[str, int, float]) -> int:
    val = int(val)
    ...

Dans cet exemple, tout ce qu'on a besoin de savoir c'est que l'objet "val" est "convertissable" en int (i.e. implémente la méthode spéciale __int__).

Quelqu'un sait comment exprimer cette idée autrement qu'avec les Unions ?
Je trouve l'utilisation de Union trop restrictive car elle n'exprime pas l'idée de "n"importe quel objet qui peut devenir int", si je veux spécifier un autre type il faut l'ajouter de manière explicite.

Merci d'avance :)

Message édité le 29 juillet 2021 à 12:19:38 par [Black_Spirit]
godrik
godrik
Niveau 30
29 juillet 2021 à 15:52:10

Can't you take SupportsInt as your type hint? It's a Protocols that comes from the PEP which defines type hinting in python 3.9.6

[Black_Spirit]
[Black_Spirit]
Niveau 19
29 juillet 2021 à 18:15:35

En effet c'est ce que je cherchais, je l'avais pas vu dans la Doc

Merci :)

godrik
godrik
Niveau 30
29 juillet 2021 à 19:26:10

Tu sais a quel point les linter et analyseur statique arrivent a voir si les types hints ne sont pas respecte?

[Black_Spirit]
[Black_Spirit]
Niveau 19
29 juillet 2021 à 19:42:19

J'ai pas beaucoup d'expérience sur le sujet car ça fait qqes mois que je suis sur un projet qui utilise MyPy pour la vérification statique des types.

Cependant j'ai quand l'impression que MyPy est fiable car ça nous force souvent à passer par des classes abstraites ou des protocoles pour que MyPy comprenne que c'est du "ducktyping".



from typing import Protocol

class MyProtocol(Protocol):
    def some_method():
        ...

class SomeClass:
    def some_method():
        ...

def handle(value: MyProtocol):
    value.some_method()

value = SomeClass()
handle(value)  # OK for MyPy

Par exemple on doit faire ce genre de trucs sinon MyPy râle.

D'ailleurs je trouve même ça parfois "trop" contraignant à vrai dire, car parfois j'ai l'impression de faire du python comme je ferais du Java (mais bon c'est mon avis ^^)

godrik
godrik
Niveau 30
29 juillet 2021 à 19:54:13

D'ailleurs je trouve même ça parfois "trop" contraignant à vrai dire, car parfois j'ai l'impression de faire du python comme je ferais du Java (mais bon c'est mon avis ^^)

En meme temps python est completement inutilisable pour n'importe quoi qui fasse plus de 200 lignes sans faire ca.

(Si tu savais le nombre de bug a la con qui m'ont fait perdre 3 jours alors que le bug est trivialement trouve par le compilateur dans n'importe quel autre langage...)

[Black_Spirit]
[Black_Spirit]
Niveau 19
29 juillet 2021 à 20:02:18

J'ai aussi codé avec des langages statiques donc je vois très bien oui. ^^ J'aime bien python mais je reste assez mitigé dans son utilisation sur de grosses bases de code (expériences pro à l'appui).

Par exemple, dans mon ancienne boîte on utilisait pas MyPy et le travail en équipe en est devenu compliqué. Beaucoup d'effets de bords dans la base de code, le moindre ajout de code devenait difficile à effectuer.

Finalement entre utiliser MyPy ou non, je préfère quand même l'utiliser car ça rend les projets plus facilement maintenables.

Utiliser MyPy + des linters + tests unitaires voire d'autres outils (comme Poetry pour la gestion des dépendances) ça rend quand même Python beaucoup plus utilisable ^^

godrik
godrik
Niveau 30
29 juillet 2021 à 20:51:27

La derniere erreur que j'ai eu etait un cas ou au lieu de faire
mavar = MonType()
on a fait
mavar = MonType

et du coup tu te retrouve a utiliser et editer un objet global de l'interpreteur au lieu de creer un nouvel objet
et comme python c'est nul, tu peux quand meme faire:
mavar.proprietesuperspecifique=12
et ca execute sans probleme parceque le typage c'est pour faire joli...

3 jour pour comprendre la source du probleme...

[Black_Spirit]
[Black_Spirit]
Niveau 19
29 juillet 2021 à 22:17:23

Oui je vois le genre ^^
A priori MyPy permet d'éviter ce genre d'erreur (tu peux aussi typer les variables, pas que les paramètres de fonction)

[Black_Spirit]
[Black_Spirit]
Niveau 19
29 juillet 2021 à 22:18:54

Sinon pour info y a une librairie sympa qui s'appelle Pydantic et propose (entre autres) les dataclasses avec vérification de type (à l'exécution donc vérification dynamique)

godrik
godrik
Niveau 30
31 juillet 2021 à 02:18:07

Pourquoi? Python ce n'est pas un vrai langage de programmation?

Pseudo supprimé
Pseudo supprimé 31 juillet 2021 à 10:43:01

Le 31 juillet 2021 à 02:18:07 :
Pourquoi? Python ce n'est pas un vrai langage de programmation?

Si par vrai langage de programmation on entend langage de programmation optimal pour au moins une tâche, alors non :)

Y a littéralement pas un seul problème pour lequel python est le bon choix

[Black_Spirit]
[Black_Spirit]
Niveau 19
31 juillet 2021 à 12:08:59

Bah si, l'automatisation de tâches par exemple (admin serveur ou autres).

Tu te vois faire ça en Java ? Faire de l'automatisation dans un langage compilé statique c'est overkill, et python a pleins de librairies intéressantes. donc c'est mieux que faire du Bash.

Sinon plus globalement pour le machine learning et le deep learning. Soit pour entrainer des modèles, soit pour les utilser => besoin de faire une API python.

C'est moi où y a bcp de trolls en ce moment sur le forum ? (Ou un tout cas des gens lourds et agressifs)

Message édité le 31 juillet 2021 à 12:11:38 par [Black_Spirit]
Pseudo supprimé
Pseudo supprimé 31 juillet 2021 à 12:25:01

Le 31 juillet 2021 à 12:08:59 :
Bah si, l'automatisation de tâches par exemple (admin serveur ou autres).

Tu te vois faire ça en Java ? Faire de l'automatisation dans un langage compilé statique c'est overkill, et python a pleins de librairies intéressantes. donc c'est mieux que faire du Bash.

Sinon plus globalement pour le machine learning et le deep learning. Soit pour entrainer des modèles, soit pour les utilser => besoin de faire une API python.

C'est moi où y a bcp de trolls en ce moment sur le forum ? (Ou un tout cas des gens lourds et agressifs)

JavaScript est mieux adapté que Python pour scripter des tâches simples, Julia est mieux adapté que Python pour faire du machine learning

D'autres questions ?

[Black_Spirit]
[Black_Spirit]
Niveau 19
31 juillet 2021 à 12:28:06

Pas vraiment non, au delà du langage, ce qui est important c'est la communauté, l'écosystème, la qualité des librairies, etc.

Julia c'est bien pour le calcul scientifique, pas (encore) pour le deep learning. La maturité des librairies est clairement pas la même.

Avant je faisais du Software Defined Networking et les SDK étaient en python donc tu m'expliques comment je fais ça dans un autre language :-)

Là je fais du Data Engineering et python c'est un bon choix car langage commun entre les Data Engineers et Data Scientists.

Le developpement ça se limite pas à faire du web backend, frontend en PHP, Java ou Javascript...

Message édité le 31 juillet 2021 à 12:32:53 par [Black_Spirit]
Pseudo supprimé
Pseudo supprimé 31 juillet 2021 à 12:37:55

Le 31 juillet 2021 à 12:28:06 :
Pas vraiment non, au delà du langage, ce qui est important c'est la communauté, l'écosystème, la qualité des librairies, etc.

Julia c'est bien pour le calcul scientifique, pas (encore) pour le deep learning. La maturité des librairies est clairement pas la même.

Avant je faisais du Software Defined Networking et les SDK étaient en python donc tu m'expliques comment je fais ça dans un autre language :-)

Là je fais du Data Engineering et python c'est un bon choix car langage commun entre les Data Engineers et Data Scientists.

Le developpement ça se limite pas à faire du web backend, frontend en PHP, Java ou Javascript...

Absolument faux, Julia est extrêmement utilisé de part le monde pour tous les domaines liés à la data science et au machine learning pour des problèmes à la pointe de la recherche, c'est absolument tout sauf immature comme écosystème :rire:

[Black_Spirit]
[Black_Spirit]
Niveau 19
31 juillet 2021 à 12:41:30

Le 31 juillet 2021 à 12:37:55 :

Le 31 juillet 2021 à 12:28:06 :
Pas vraiment non, au delà du langage, ce qui est important c'est la communauté, l'écosystème, la qualité des librairies, etc.

Julia c'est bien pour le calcul scientifique, pas (encore) pour le deep learning. La maturité des librairies est clairement pas la même.

Avant je faisais du Software Defined Networking et les SDK étaient en python donc tu m'expliques comment je fais ça dans un autre language :-)

Là je fais du Data Engineering et python c'est un bon choix car langage commun entre les Data Engineers et Data Scientists.

Le developpement ça se limite pas à faire du web backend, frontend en PHP, Java ou Javascript...

Absolument faux, Julia est extrêmement utilisé de part le monde pour tous les domaines liés à la data science et au machine learning pour des problèmes à la pointe de la recherche, c'est absolument tout sauf immature comme écosystème :rire:

Si ça t'intéresse tant que ça donne des exemples concrèts plutôt que dire des vérités générales. Je sais pas, donne moi des chiffres, montre moi des librairies, des noms d'entreprises qui ont fait le switch intégral de python vers Julia, etc.

Car bon là en attendant à part venir troller sur un topic qui, à la base, n'est pas un topic pour débattre sur le langage ...

Puis bon, les débats en mode "j'ignore tous les contres arguments qui montrent que mon avis n'est pas une vérité" c'est un peu fatiguant.

Message édité le 31 juillet 2021 à 12:42:50 par [Black_Spirit]
Pseudo supprimé
Pseudo supprimé 31 juillet 2021 à 12:46:02

Le 31 juillet 2021 à 12:41:30 :

Le 31 juillet 2021 à 12:37:55 :

Le 31 juillet 2021 à 12:28:06 :
Pas vraiment non, au delà du langage, ce qui est important c'est la communauté, l'écosystème, la qualité des librairies, etc.

Julia c'est bien pour le calcul scientifique, pas (encore) pour le deep learning. La maturité des librairies est clairement pas la même.

Avant je faisais du Software Defined Networking et les SDK étaient en python donc tu m'expliques comment je fais ça dans un autre language :-)

Là je fais du Data Engineering et python c'est un bon choix car langage commun entre les Data Engineers et Data Scientists.

Le developpement ça se limite pas à faire du web backend, frontend en PHP, Java ou Javascript...

Absolument faux, Julia est extrêmement utilisé de part le monde pour tous les domaines liés à la data science et au machine learning pour des problèmes à la pointe de la recherche, c'est absolument tout sauf immature comme écosystème :rire:

Si ça t'intéresse tant que ça donne des exemples concrèts plutôt que dire des vérités générales. Je sais pas, donne moi des chiffres, montre moi des librairies, des noms d'entreprises qui ont fait le switch intégral de python vers Julia, etc.

Car bon là en attendant à part venir troller sur un topic qui, à la base, n'est pas un topic pour débattre sur le langage ...

Puis bon, les débats en mode "j'ignore tous les contres arguments qui montrent que mon avis n'est pas une vérité" c'est un peu fatiguant.

Quel argument j'ai ignoré ? :question:

[Black_Spirit]
[Black_Spirit]
Niveau 19
31 juillet 2021 à 12:50:37

Le 31 juillet 2021 à 12:46:02 :

Le 31 juillet 2021 à 12:41:30 :

Le 31 juillet 2021 à 12:37:55 :

Le 31 juillet 2021 à 12:28:06 :
Pas vraiment non, au delà du langage, ce qui est important c'est la communauté, l'écosystème, la qualité des librairies, etc.

Julia c'est bien pour le calcul scientifique, pas (encore) pour le deep learning. La maturité des librairies est clairement pas la même.

Avant je faisais du Software Defined Networking et les SDK étaient en python donc tu m'expliques comment je fais ça dans un autre language :-)

Là je fais du Data Engineering et python c'est un bon choix car langage commun entre les Data Engineers et Data Scientists.

Le developpement ça se limite pas à faire du web backend, frontend en PHP, Java ou Javascript...

Absolument faux, Julia est extrêmement utilisé de part le monde pour tous les domaines liés à la data science et au machine learning pour des problèmes à la pointe de la recherche, c'est absolument tout sauf immature comme écosystème :rire:

Si ça t'intéresse tant que ça donne des exemples concrèts plutôt que dire des vérités générales. Je sais pas, donne moi des chiffres, montre moi des librairies, des noms d'entreprises qui ont fait le switch intégral de python vers Julia, etc.

Car bon là en attendant à part venir troller sur un topic qui, à la base, n'est pas un topic pour débattre sur le langage ...

Puis bon, les débats en mode "j'ignore tous les contres arguments qui montrent que mon avis n'est pas une vérité" c'est un peu fatiguant.

Quel argument j'ai ignoré ? :question:

Suffit de relire.
Sinon j'attends encore de vraies sources sur pourquoi il faudrait ABSOLUMENT remplacer Julia par Python en 2021.

Bref, débat stérile.

Pseudo supprimé
Pseudo supprimé 31 juillet 2021 à 13:20:21

Le 31 juillet 2021 à 12:50:37 :

Le 31 juillet 2021 à 12:46:02 :

Le 31 juillet 2021 à 12:41:30 :

Le 31 juillet 2021 à 12:37:55 :

Le 31 juillet 2021 à 12:28:06 :
Pas vraiment non, au delà du langage, ce qui est important c'est la communauté, l'écosystème, la qualité des librairies, etc.

Julia c'est bien pour le calcul scientifique, pas (encore) pour le deep learning. La maturité des librairies est clairement pas la même.

Avant je faisais du Software Defined Networking et les SDK étaient en python donc tu m'expliques comment je fais ça dans un autre language :-)

Là je fais du Data Engineering et python c'est un bon choix car langage commun entre les Data Engineers et Data Scientists.

Le developpement ça se limite pas à faire du web backend, frontend en PHP, Java ou Javascript...

Absolument faux, Julia est extrêmement utilisé de part le monde pour tous les domaines liés à la data science et au machine learning pour des problèmes à la pointe de la recherche, c'est absolument tout sauf immature comme écosystème :rire:

Si ça t'intéresse tant que ça donne des exemples concrèts plutôt que dire des vérités générales. Je sais pas, donne moi des chiffres, montre moi des librairies, des noms d'entreprises qui ont fait le switch intégral de python vers Julia, etc.

Car bon là en attendant à part venir troller sur un topic qui, à la base, n'est pas un topic pour débattre sur le langage ...

Puis bon, les débats en mode "j'ignore tous les contres arguments qui montrent que mon avis n'est pas une vérité" c'est un peu fatiguant.

Quel argument j'ai ignoré ? :question:

Suffit de relire.
Sinon j'attends encore de vraies sources sur pourquoi il faudrait ABSOLUMENT remplacer Julia par Python en 2021.

Bref, débat stérile.

C'est marrant de laisser entendre que je serais malhonnête intellectuellement dans le débat, en évitant certains arguments alors que de ton côté tu refuses de me dire à quoi tu fais allusion le tout en essayant d'éviter la question en ramenant à une question postérieure au début présent. :)

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment