Python et POO — Les-mathematiques.net The most powerful custom community solution in the world

Python et POO

Bonsoir,

J'ai décidé de sauter le pas en m'intéressant à la Programmation Orientée Objet (POO) afin de gagner en efficacité. J'ai toujours utilisé l'approche dite "procédurale"; cela tient certainement au fait que j'ai commencé par le Fortan 77. De fait je suis totalement novice dans ce domaine.

C'est un vaste sujet, et il y a quantité de lectures; je sollicite toutefois des conseils afin de m'orienter vers les bonnes documentations et trouver les bonnes informations, voire (je l'espère) échanger sur le sujet.

Mon premier essai ci-dessous fonctionne, mais j'aimerais améliorer "l'instantiation" et retrouver quelque part une syntaxe à la "Numpy"; un exemple avec numpy.ndarray.shape versus numpy.shape (le premier reprend la syntaxe POO avec A.shape - le second me semble plus "naturel" avec quelque chose comme numpy.shape(A)) $\rightarrow$ Comment imaginer une instatiation du genre MyClasse.pair(A)?

J'imagine que c'est faisable

Paul
import numpy as np


class PairImpair():
    
    # documentation
    "On cherche à créer une class qui extrait à la demande les chiffres pairs ou impairs "
    
    # création du constructeur
    def __init__(self, MAT):
        self.M = MAT        
        
    def pair(self):
        a = np.where(np.mod(self.M,2) == 0.)
        return self.M[a]
    
    def impair(self):
        a = np.where(np.mod(self.M,2) != 0.)
        return self.M[a]
        
        
    
# création d'un vecteur composé d'entiers
n = 10

A = np.random.randint(-100, 100_000, size=n, dtype = np.int32)

# P pour pair, et I pour impair
P = PairImpair(A).pair()
I = PairImpair(A).impair()
«13

Réponses

  • Ça marche chez moi. Affiche P et I pour voir le résultat.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Sauf si tu es accroché à Python, tu devrais aller voir du côté de Julia, qui permet de faire de la programmation orientée objet comme monsieur Jourdain faisait de la prose: sans le savoir.

    https://docs.julialang.org/en/v1/manual/types/#Composite-Types-1

    http://www.iecl.univ-lorraine.fr/~Olivier.Garet/livre_julia/
  • En Python aussi, on en fait sans le savoir, enfin, on en utilise sans le savoir.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • @aléa: Oui Julia est prometteur en termes de puissance et vitesse, mais il ne dispose pas encore d'autant de librairies que Python (encore trop jeune), du coup je n'ai pas sauté le pas; il y a aussi l'IDE: je n'accroche pas avec Juno ou Visual Studio

    @Nicolas: peut-être ai-je utilisé le mauvais terme avec "instantiation", mais je sais que mon programme fonctionne, je veux juste dire que je cherche en pratique à utiliser quelque chose comme MyClasse.pair(A) plustôt que PairImpair(A).pair() à l'instar de np.shape(A)
  • En utilisant classmethod, on obtient ça avec les modifications en rouge :
    import numpy as np
    
    class PairImpair():
        
        # documentation
        "On cherche à créer une class qui extrait à la demande les chiffres pairs ou impairs "
        
        # création du constructeur
        def __init__(self, MAT):
            self.M = MAT        
            
        def pair(self):
            a = np.where(np.mod(self.M,2) == 0.)
            return self.M[a]
        
        [color=#FF0000]@classmethod
        def Pair(cls, self):
            return cls(self).pair()[/color]
        
        def impair(self):
            a = np.where(np.mod(self.M,2) != 0.)
            return self.M[a]
    
        [color=#FF0000]@classmethod
        def Impair(cls, self):
            return cls(self).impair()[/color]
        
    # création d'un vecteur composé d'entiers
    n = 10
    
    A = np.random.randint(-100, 100_000, size=n, dtype = np.int32)
    
    # P pour pair, et I pour impair
    P = PairImpair(A).pair()
    I = PairImpair(A).impair()
    [color=#FF0000]print(P,I) 
    
    Q = PairImpair.Pair(A)
    print(Q)
    
    R = PairImpair.Impair(A)
    print(R)[/color]
    
  • @__Julien__ : je note l'ajout du décorateur et de la méthode Pair; je l'avais vu ici mais je vois mieux son utilité maintenant

    Je vais creuser dans cette voie

    Merci à tous
  • Ne confonds pas np.shape qui est une fonction shape importée du module np avec PairImpair.Pair. Si tu veux utiliser PairImpair.Pair comme np, il fait que tu importes ton fichier dans un autre.
    Si c’est juste pour importer une fonction ou deux, tu peux très bien le faire en impératif et tu auras la même notation.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • @Nicolas:
    Dans un premier temps je me suis intéressé à la syntaxe et l'idée était de retrouver une écriture plus "familière"; l'exemple de Numpy et shape me semblait pertinente (2 façons de faire); je ne saisis pas encore la portée de ta remarque, peux-tu donc développer un peu?
  • Le point signifie plusieurs choses en Python :
    • Le séparateur décimal mais ce n’est pas ce qu’on veut.
    • Le séparateur entre un objet et un attribut ou une méthode de cet objet.
    • Le séparateur entre un module et une fonction ou un élément de ce module.
    Tu as modélisé le deuxième cas, tu voulais faire le troisième même si ça s’écrit de la même manière.
    Mais comme tout est objet en Python, je soupçonne que les deux dernières ne sont pas si différentes que ça.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • je n'ai qu'une vision assez réduite de la POO, donc peut-être que je me fourvoie; en l’occurrence ce sont les méthodes qui m'intéressent de façon à réaliser certaines "actions" en 1 seule instruction et gagner en flexibilité: lire, écrire, extraire, calculer certaines grandeurs, réarranger des tableaux, lancer des exécutables ... avec des "sous-méthodes" comme extraire les nombres pairs ou impairs pour reprendre l'exemple présent.

    Les arguments comme les sorties seront des fichiers (créés ou mis à jour), des matrices, des figures, etc.

    Ce sont-là des exemples génériques, et le code du début est un premier essai; il me permets en même temps de tester Numpy + la vectorisation, entre autres choses.

    Il me faut encore approfondir le sujet afin de structurer mon approche et ainsi d'adapter et améliorer mes codes existants
  • Si tu veux jouer avec la programmation orientée objet, essaie de créer une classe qui te permet de manipuler les nombres complexes (même s’ils existent déjà dans Python), puis essaie les polynômes (là, c’est dans sympy ou dans sage).
    C’est formateur.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Bonjour,

    Dans l'exemple ci-dessous, je teste le plus simple des décorateurs @staticmethod, qui appelle des fonctions simples sans avoir à instancier un objet; l'idée sous jacente est ici de transformer des fonctions déjà existantes en méthodes.

    Ici les fonctions racine/cube/carre/lecture sont définies dans la class, et je cherche le moyen de les sortir (de façon générale je souhaite appeler des fonctions extérieures à la class); je regarde du côté de @classmethod, mais je dois mal m'y prendre et certainement pas compris son fonctionnement.

    Vers quoi dois-je regarder ?

    Merci

    Paul
    # -*- coding: utf-8 -*-
    """
        essai de @staticmethod qui evite d'instancier la class
        création d'une classe "MyClass" qui execute des opérations simples sur un nombre
        source: https://levelup.gitconnected.com/method-types-in-python-2c95d46281cd
    """
    from math import *
    
    class MyClass(object):
        
        @staticmethod
        def racine(val):
            if val >= 0:
                return sqrt(val)
            else:
                return ("Valeur négative => impossible")
                
        def carre(val):
            return (val**2)
        
        def cube(val):
            return (val**3)
        
        def lecture(fichier):
            print("je lis le fichier {}".format(fichier))
    
    y = -4.        
    print("racine({}) = {}".format(y,MyClass.racine(y)))
    print("racine({}) = {}".format(-y,MyClass.racine(-y)))
    print("carre({}) = {}".format(y,MyClass.carre(y)))
    print("cube({}) = {}".format(y,MyClass.cube(y)))
    
  • Je ne comprends pas bien le problème. Si tu ne veux pas que tes fonctions soient dans une classe alors pourquoi les mettre ?

    Tu n'as qu'à utiliser des fonctions normales dans ce cas genre :
    def racine(val):
            if val >= 0:
                return sqrt(val)
            else:
                return ("Valeur négative => impossible")
    
  • Il serait plus sain d’utiliser le mot-clé raise pour lever une exception ValueError si la valeur est négative.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • [quote="
    Je ne comprends pas bien le problème. Si tu ne veux pas que tes fonctions soient dans une classe alors pourquoi les mettre ?"]
    [/quote]

    Actuellement j'appelle des fonctions que j'ai développées ces dernières années (disséminées dans différents répertoires de travail) ; l'idée est de les refondre pour les transformer en méthodes de façon à gagner en visibilité, en confort et en maintenance.

    Mon raisonnement est le suivant, en utilisant le paquet Numpy comme exemple: numpy.max(), numpy.copy(), numpy.where() lancent des méthodes qui vont chercher respectivement la valeur maximale, qui copie une matrice, ou qui localise les coefficients pour lesquels les conditions sont "True"; et bien je cherche à faire la même chose avec mes propres fonctions, que j’appellerai avec mon_paquet.fonction_x(arguments) par exemple.

    Ma question venait du fait que je n'imagine pas 'et ne veux pas) d'un unique fichier qui concatène toutes les fonctions; quelque part la remarque montre qu'il y a encore du travail de compréhension de mon côté :-D

    La façon la plus simple de procéder est peut-être ce qui suit
    class MyClass(object):
        
        @staticmethod
        def racine(val):
            j'appelle ici ma fonction "carré"
    


    Quant aux exceptions, j'avoue ne pas avoir pris ce réflexe

    Merci pour ces remarques

    Paul
  • OK je vois. Pour faire comme numpy il faut que tu crées un module. Un module c'est simplement un fichier ayant l'extension .py comme d'habitude et contenant tes fonctions (enfin les fonctions propres au module). Ensuite depuis un autre script tu peux appeler ton module exactement comme tu le ferais avec numpy en faisant
    import mon_module
    

    et tu utiliserais ta fonction racine en faisant :
    mon_module.racine(2)
    

    pour que ceci marche il faut que ton fichier mon_module.py soit au même niveau que ton script.
    Si tu ne veux pas avoir ce problème de chemin il faut mettre à jour la variable d'environnement PYTHONPATH avec le chemin du dossier qui contient tes modules. Dans ce cas tu pourras faire ton import sans problèmes.

    Plus de détail : doc modules python
  • Merci pour l'info sur les modules, je vais creuser aussi dans cette direction.

    Au final peut-être n'ai-je pas besoin de la POO dans un premier temps, car je pensais que le "." faisait nécessairement référence à une Class (comme tout est objet en Python ...)

    Paul
  • Bonjour
    Je vous déconseille le langage Python pour des raisons informatiques.
    - Incohérences des bibliothèques.
    - Inutilisé dans le monde réel (ou pour des logiciels qui font plus de bruits qu'ils ne sont réellement vendus).

    C'est une pâle copie du C++ et un affabulation de pseudo-informaticiens.
    Votre secteur est protégé par des "Gardiens" auto-proclamés des mathématiques qui n'y connaissent rien.
    Pour preuve, je suis abasourdis par les aberrations et idées stupides et/ou dépassées qui sont dites sur l'informatique sur ce forum.
    Faites attention de ne pas envoyer vos élèves dans des impasses, en croyant que en maîtrisant les mathématiques, l'informatique est facile.
    Quand je lis les discussions, je détecte une profonde ignorance de ce qu'est réellement l'informatique, et beaucoup de prétentions chez certains, qui font des affirmations fausses sans savoir.

    Bien sûr, les mathématiques, sont une base nécessaire, voir même indispensable pour aborder les mathématiques, mais ABSOLUMENT PAS SUFFISANTE !!!

    Tous ceci parce que les élèves sont attirés par l'informatique, et donc certains veulent les récupérer dans leur filière, sans pour autant avoir le courage de se former, ni de préparer de vrais cours d'informatique.
    Ils en sont (pour ceux qui sont bien placés) à vouloir fermer les vrais filières Informatiques, et à éliminer les informaticiens et vrais options informatiques pré-BAC

    Cordialement.
  • @Bruno.Moraut

    Autant je n'aime pas Python pour diverses raisons, autant je ne peux pas laisser dire que ce dernier n'est pas utilisé dans le monde réel.
    Le monde réel en informatique n'est pas constitué uniquement de logiciels qui se vendent...
    Dans l'industrie Python est très utilisé par les ingénieurs (bien plus que le C++ ou Java), en calcul scientifique il est très présent. C'est un formidable outil pour chaîner les calculs, analyser les résultats, faire de l'ETL, prototyper... etc.

    Bien évidement il n'aura jamais les performances d'un code en C++ utilisant la vectorisation saupoudré d'intrasics, oui il n'est pas réellement multitâches à cause du GL de l’interpréteur mais ce n'est pas ce qu'on lui demande.
  • Bruno.Moraut, ça serait bien que tu donnes des exemples et/ou des sources.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Bonjour,
    Exemples du C++:

    Tous les systèmes d'exploitations:
    - Linux
    - Windows
    - iOS

    Tous Les Drivers des PC :
    - Linux
    - Windows
    - Apple (développement internes ou partenariats payants)

    La Grande Majorité des DAO (Dessin assisté par ordinateur) ou d'animation:
    - Catia - Dassault aviation
    - AutoDesk Maya (regroupés)
    - etc...

    PrintMusic (Final)
    Tous les Jeux Vidéo 3D de toutes les société, des plus anciennes au nouvelles:
    - Infogram ,
    - Ubisoft,
    - Sony,
    - Nitendo
    - etc...

    Donc ne dites pas que Python est le plus utilisé !

    Exemple de projets avortés ou récupérés par le privé en c++:
    - Drupal (perte de documents pour plusieurs Universités)
    - MathLab (passé du Gratuit à 15000€ la licence complète) et récupéré par une société privée.

    Votre réflexion:
    "Le monde réel en informatique n'est pas constitué uniquement de logiciels qui se vendent... "
    Malheureusement, j'ai suivi l'évolution des "Logiciels Libres" qui suivent toujours le même chemin:
    - Idée ou recherche géniale
    - Contributions de nombreuses personnes
    - Récupération par un des "contributeur" plus malin
    - Déception des autres et non-rétribution de leur travail
    - Fortune du malin

    Un exemple que j'ai vécu de l’intérieur, mais je pourrai en citer des dizaines, sans compter justement ceux qui ne veulent pas se vanter d'avoir fait rêver des contributeurs gratuits (et pas payés):
    - Picviz Lab (Surveillance des réseaux): Récupération de sources Gratuit --> Passage en privé
    - MathLab : Récupération de sources Gratuit --> Passage en privé avec mise de la cohérence des bibliothèques
    etc..

    Ceci confirme bien que vous n'avez absolument pas une vision d'ensemble de ce qu'est l'informatique.
    Python a des bibliothèques avec des algorithmes qui résolvent des problèmes complexes, mais les BTS et DUT (qui constitue le gros contingent des développeurs) formés par l'E.N. sont incapables de les utiliser correctement.
    En plus, étant développés par des contributeurs tous différents, il y a une complète incohérence d'utilisation des fonctionnalités, ce qui est un énorme handicap.
    Cordialement
    Bruno
  • Et à part troller contre Python avec quelques exemples tirés de ton chapeau (une cueillette de cerises et deux messages), tu fais quoi en maths ?
    Tu vois vraiment apprendre les bases de la programmation et/ou de l’algorithmique avec C++, toi ?
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • D'autant que si Linux ou ses drivers étaient écrits en C++, ça se saurait. C'est un troll de piètre qualité.
  • Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • N'importe quoi, Python est plus utilisé que le C++. Une autre source. Et encore une autre. Et une dernière.

    Bref au mieux un troll, au pire un ignorant.
  • > Tous les systèmes d'exploitations:
    > - Linux
    C'est du C
    > - Windows
    C'est du C
    > - iOS
    Le kernel de iOS vient de XNU qui est écrit en C en et un peu de C++

    >
    > Tous Les Drivers des PC :
    > - Linux
    C
    > - Windows
    C et un peu de C++

    > Donc ne dites pas que Python est le plus utilisé
    > !

    Je ne dis pas que Python est le plus utilisé, je dis que Python est très utilisé dans l'industrie et qu'il est faux de dire que cela ne sert a rien...

    >
    > - MathLab (passé du Gratuit à 15000€ la
    > licence complète) et récupéré par une
    > société privée.

    C’était en Python ? quel rapport ?

    > "Logiciels Libres" qui suivent toujours le même

    Qui a parlé de logiciels libres ?
    Ex. Je travail dans une R&D, production d'une grande quantité de codes scientifiques pour usage interne. 50% Fortran, 25% C, 10% C++ le reste c'est du R et de Python et aucun de ces logiciels n'est un logiciel libre.
    Nous produisons également des logiciels plus classiques (gestion de données, analyse, gestion de documents...) en Java, Go, Python, Javascript et très peu en C++, tous internes, et ce n'est pas non plus du logiciel libre.
    En interne Adobe, Microsoft, Ubisoft... utilisent massivement Python pour tout un tas de traitements.
    C'est aussi ça un langage utilisé dans l'industrie...

    >
    > Ceci confirme bien que vous n'avez absolument pas
    > une vision d'ensemble de ce qu'est
    > l'informatique.

    Je ne vois pas d'autres explications... bref

    > En plus, étant développés par des contributeurs
    > tous différents, il y a une complète
    > incohérence d'utilisation des fonctionnalités,
    > ce qui est un énorme handicap.

    On reparle de boost ?

    De plus, je n'aime pas Python mais je préfère 1000 fois un mauvais développeur Python à un mauvais développeur C++...

    Enfin pour terminer, ce n'est pas vraiment en insultant les membres d'un forum à chaque message que vous apportez la preuve de vos compétences ou de la pertinence de votre point de vue, bien au contraire.
  • J'ajoute que c'est également extrêmement utilisé dans la recherche et dans l'enseignement au niveau mondial (des collègues profs à la fac aux US et en Chine utilisent Python).
  • Bonsoir,
    Bruno.Moraut a écrit:
    MathLab (passé du Gratuit à 15000€ la licence complète) et récupéré par une société privée.

    MathLab n'existe pas, c'est Matlab (abréviation de Matrix Laboratory), j'ai acheté la licence avec deux bibliothèques pour moins de 200 €.

    Cordialement,

    Rescassol
  • Formidable,
    Pour Matlab, certaines bib ne sont pas chères , mais dès que l'on veut des choses avancées,
    ce n'est plus 200€.
    J'en sais quelque-chose car on a fait venir les commerciaux pour acheter des bib avancées.

    Windows est bien aussi en c++, et beaucoup de driver !

    "Enfin pour terminer, ce n'est pas vraiment en insultant les membres d'un forum à chaque message que vous apportez la preuve de vos compétences ou de la pertinence de votre point de vue, bien au contraire."
    Je n'insulte personne, mais je ne suis pas le mouvement en France des "pseudo" informaticiens, qui l’emmène (pour le domaine informatique), dans le mur.
    Ce n'est pas parce que l'on est bon en mathématique, que cela fait de vous un expert en informatique.
    C'est l'impression que j'ai sur ces forums de mathématique, très très intéressants pour les mathématiques, avec des gens brillants dans ce domaine, je tiens à le souligner, mais je vous "avertis" de faire attention à ce que vous affirmez pour l'informatique.

    J'ai d'ailleurs fait quelques échanges très inintéressants avec un très célèbre mathématicien, chargé d'étudier l'IA et son avenir pour la France et l'Europe.
    Je le redis, les mathématiques sont une base nécessaire, indispensable mais PAS SUFFISANTE pour l'informatique !
    Dès que l'on remet en question certains, ils se sentent forcément insultés, et ne veulent pas remettre en question leur position avec leurs œillères (d'où l'impression d'être "insulté" je pense pour ceux-ci).

    Mais je constate que la recherche (j'en ai fait partie) s'éloigne du monde réel,
    et l'EN (j'en ai fait partie aussi) ne forme pas dans les bons langages, les bonnes personnes :
    c'est ce que je retire de mon expérience et des mes confrères chef d'entreprise que je rencontre
    qui parlent qu'il ne peuvent embaucher de vrai programmeurs, avec un niveau correct, (impossible de trouver des programmeurs C++, C et même Pyton etc. et capables de faire un travail correct) et n'utilisent que des langages simples par dépit.
    Certains parlent pour les BTS et DUT infos avec des termes très vulgaires, lors de discutions entre responsables, ce qui indique le faible niveau de ces diplômes !
    Pour information, avant que vous répondiez, j'ai 2 BTS info, et franchement je n'ai rien appris avec !
    J'ai donc appris par moi-même et passé des diplômes beaucoup plus avancés en informatique et mathématiques.
    Je ne veux pas exposer mon niveau, mais si vous le souhaitez, je peux apporter la preuve de mes quelques modestes compétences, certes modestes, mais qui m'évitent de dire des bêtises comme je le vois trop souvent sur ce genre de forum.
    C'est uniquement pour éviter à certains de se bercer d'illusions sur l'informatique, que je me permets d'intervenir.

    Cordialement.
  • Modeste ? Tu n’as pas présenté tes modestes compétences de manière très modeste. :-D
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Si tu veux faire de la POO je te conseille d’apprendre Java dans un premier temps.
  • Personne n'a prétendu qu'être bon en mathématiques implique d'être bon en informatique.

    Par contre, on attend toujours des sources sur tes affirmations... J'ai cité pour ma part diverses sources qui montre que tu es dans le faux à propos de Python, qui est à ce jour facilement dans le top 5 voire 3 des langages les plus utilisés dans le monde.
  • Ce qui est sûr c’est que Python est le langage officiel du programme du lycée (personnellement je trouve dommage d’en avoir choisi un) et qu’on attend des professeurs de mathématiques une maitrise élémentaire de ce langage. Langage effectivement très largement utilisé car simple et très portable mais peu performant pour des traitements gourmands en calculs.
  • Comme tout langage interprété, Python est lent si on s'évertue à utiliser des boucles, des conditions, de l'allocation dynamique de mémoire (append) par exemple (voir ce post). Il y a aussi des artifices avec Numba.

    A l'instar de Matlab ou Scilab, Numpy utilise la vectorisation avec des gains très importants sur les temps de calculs, mais il est sûr que pour du calcul intensif, le C/C++, le Fortran, Julia, les GPU, etc lui seront préférés ... mais qui en a réellement besoin ?

    Une étude comparative menée par la Nasa.
  • J’ai lu quelque part que Python (en interne) pré-alloue de la mémoire quand on crée une liste.
    Par exemple, si on crée une liste de 10 termes, il en pré-alloue 5 de plus au cas où.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • J'utilise communément des tableaux (array) de plusieurs centaines de milliers de lignes à plusieurs millions, et plusieurs dizaines de colonnes; l'initialisation se fait principalement avec numpy.zeros, mais aussi numpy.eye, numpy.ones selon les besoins; je vois difficilement l'intérêt des listes pour du calcul "un peu poussé".
  • Ce n'est pas un problème que Python soit "lent" (et encore on pourrait débattre longuement de ce que ça veut exactement dire et que c'est faux en général), chaque langage a ses forces et ses faiblesses. Il n'existe pas de langage ultime ayant toutes les qualités. On ne demande pas à un monospace de faire du 300 km/h comme on ne demande pas à un coupé sportif de pouvoir transporter une famille de 7 personnes !

    Les qualités de Python sont ailleurs que dans la rapidité de calcul pure. Si on veut vraiment de la perfo, on se tourne vers le C/C++ par exemple.

    Un truc utile, très utilisé dans les codes de recherche académique, est de faire un code en Python qui appelle du code en C/C++ ou Fortran dans les parties critiques qui nécessitent beaucoup de calculs. C'est très utile car on a à la fois la vitesse et la souplesse de l'écriture haut niveau de Python (qui est aussi un langage de script très utilisé).
  • Et c'est ce qui se passe automatiquement lorsqu'on utilise NumPy !
  • Bonjour
    Il semble que le leitmotive de ce forum soit la discussion (y compris "passionnée" je le conçois).
    Mais des phrases telles que :
    "Bref au mieux un troll, au pire un ignorant."
    Ce n'est pas moi qui insulte les gens !
    Je comprends la passion, mais il faut rester dans le charme et la convivialité pour une discussion saine et enrichissante.
    Pour répondre à la question du meilleur langage du jour, je citerai les phrases échangées précédent, qui y répondent par elles-même :
    "(le pyton est...) simple et très portable mais peu performant pour des traitements gourmands en calculs. "
    "Ce n'est pas un problème que Python soit "lent" (et encore on pourrait débattre longuement de ce que ça veut exactement dire et que c'est faux en général), chaque langage a ses forces et ses faiblesses. Il n'existe pas de langage ultime ayant toutes les qualités."
    "mais il est sûr que pour du calcul intensif, le C/C++, le Fortran, Julia, les GPU, etc lui seront préférés ... mais qui en a réellement besoin ?"

    Malheureusement il en faut de la performance !
    "N'importe quoi, Python est plus utilisé que le C++"
    En nombre d'utilisateurs ou en CA de Logiciels qui fonctionnent ?
    Pour ce qui est de python, il est apparemment simple et pas très efficace !
    Ce n'est pas parce que un langage "simple" est le plus utilisé au monde que c'est le meilleur !
    'Un truc utile, très utilisé dans les codes de recherche académique, est de faire un code en Python qui appelle du code en C/C++ ou Fortran dans les parties critiques qui nécessitent beaucoup de calculs. C'est très utile car on a à la fois la vitesse et la souplesse de l'écriture haut niveau de Python (qui est aussi un langage de script très utilisé)."
    Faux, j'ai fait de la recherche académique, et maintenant beaucoup de laboratoires n'utilisent que du C/C++ sous Windows. Linux, Python et autres systèmes "libres" sont abandonnés, du fait du manque de performance et de suivi. (on m'a fait visiter dans des labos, de couloirs avec les placards pleins contenant les livres, disquettes de ces "systèmes utopiques abandonnés").
    Bien sûr, il reste des travaux, du fait que ce langage est imposé par les académies, par des gens qui n'y connaissent rien en informatique, et très virulents (voir début du message par exemple) et parce que tous simplement c'est gratuit !

    Ben, oui , finalement qui a besoin de performances ?
    Pendant que les créateurs de PC et Processeurs s'évertuent à augmenter les performances de calculs,
    pourquoi ne reviendrait-on pas au langages interprétés (BASIC).
    Un exemple de qui a besoin de performances : tous les utilisateurs de logiciels tous simplement,
    la recherche médicale, les communications, la télévision, la téléphonie, la productique, aérospatiale, le génie civil etc. en fait tous les domaines ...

    Je veux simplement vous faire prendre conscience que de chercher la facilité ne résout rien.
    On envoie des milliers de jeunes dans les formations informatiques.
    Ils n'en ont pas tous les capacités.
    Résultat on leur fait apprendre des langages simples et inefficaces...
    Cependant les entreprises ne trouvent pas de développeurs à la hauteur des enjeux de demain !
    Mais un logiciel (surtout s'il est performant) peut se diffuser rapidement et mettre au chômage les développeurs des langages simples et peu performants, et aussi mettre en difficultés les sociétés qui utilisent les deuxièmes.

    "Par contre, on attend toujours des sources sur tes affirmations... J'ai cité pour ma part diverses sources qui montre que tu es dans le faux à propos de Python, qui est à ce jour facilement dans le top 5 voire 3 des langages les plus utilisés dans le monde."
    "Et à part troller contre Python avec quelques exemples tirés de ton chapeau (une cueillette de cerises et deux messages), tu fais quoi en maths ?

    Pour y répondre j'ai un Master en Informatique avancée à Finalité Recherche en Science et Santé, et je suis aussi Ingénieur en Génie Mécanique et Productique.
    Je fais des calculs de RDM, de la Tomographie Médicale, de la 3D avec mon propre Moteur, des logiciels de Musiques etc.
    Je suis un développeur sur GPU, et j'améliore les performances de logiciels en les passant sur C++ et GPU.

    "Tu vois vraiment apprendre les bases de la programmation et/ou de l’algorithmique avec C++, toi ?"
    Et tant qu'à apprendre la programmation orientée objet, je conseille de le faire sur un langage performant !
    La réalité des entreprises que je côtoie, c'est qu'elle payent bien plus les programmeurs C++ que les autres, du fait de la raretés, et surtout de l'efficacité des résultats des logiciels.
    Exemple. Postulez en disant que vous maîtriser le C++, la programmation GPUs ...

    Cordialement.
  • @Bruno.Moraut et donc tu préconises quoi finalement ? de supprimer Python du paysage des langages informatiques ?
  • @Bruno Moraut : pour discuter avec des gens courtois, encore faut-il commencer par être un minimum courtois soi-même. Quand on débarque comme un bourrin en disant des choses comme ça (je reprends ton 1er message sur ce forum) :
    Bruno Moraut a écrit:
    Je vous déconseille le langage Python pour des raisons informatiques.
    - Incohérences des bibliothèques.
    - Inutilisé dans le monde réel (ou pour des logiciels qui font plus de bruits qu'ils ne sont réellement vendus).

    C'est une pâle copie du C++ et un affabulation de pseudo-informaticiens.

    Votre secteur est protégé par des "Gardiens" auto-proclamés des mathématiques qui n'y connaissent rien.
    Pour preuve, je suis abasourdis par les aberrations et idées stupides et/ou dépassées qui sont dites sur l'informatique sur ce forum.

    Bref quand on arrive en disant ce que j'ai mis en gras, à savoir que les gens du forum sont tous des nuls, des pseudo-informaticiens, des affabulateurs, des gens arriérés (quand on sait à quel point Python est utilisé dans le monde professionnel et à la mode, c'est drôle !), venir réclamer de la courtoisie, c'est l'hôpital qui se fout de la charité !!!

    Je ne chercherai même pas à tenter d'argumenter pour te convaincre de l'intérêt de Python dans le monde réel : vu tes propos caricaturaux et dogmatiques et vu que d'autres (notamment @Héhéhé) ont tenté en vain, je vois bien que je perdrai mon temps !
  • Re
    @Bruno.Moraut et donc tu préconises quoi finalement ? de supprimer Python du paysage des langages informatiques ?

    Non, mais je conseille, quitte à faire de la POO, de choisir un langage performant, et surtout de ne pas donner l'illusion que la programmation est facile et sera facile dans l'avenir.
    Apprendre un langage est long, et en plus les bib d'un système encore plus.
    Si c'est pour envoyer toute une génération au casse pipe avec un langage, qui n'étant pas performant, va disparaître, il vaux mieux ne faire que des maths.
    J'ai trop vu des développeurs finir à la poubelle (reconverti par dépit, et dégoûtés, vers un autre métier) pour ne plus réagir face à une EN qui fait n'importe quoi, et qui vend des illusions.
    À 30 ans c'est la porte de sortie, (40 si une niche et que l'on devient célibataire) remplacé par une autre génération (j'en connais de ma famille, et échangé et/ou relevé le désespoir de centaines dans ce cas sur internet).

    Le C et le C++ sont toujours là depuis le début, et pour répondre à ceux qui disent qu'il n'y a pas de "meilleur langage", le C++ a tous les avantages, sauf celui d'être simple :
    - Puissant
    - Rapide
    - Bibliothèque ou l'on peut tous faire (Windows, comme Linux ou OS d'Apple)
    - BIB de math
    - Modélisations , Méta modélisation, UML
    - Compilateurs performants (Visual Studio je conseille, ou peut être ECLIPSE (je ne le connaît que de nom))
    - Portabilité du code de Windows à Linux et réciproquement avec les directives de précompilation.

    Mais je le concède, pour un prof de math, initier à la programmation avec C ou C++ ce n'est pas évident.
    Mais l'EN n'aurait-elle pas du recruter de vrai profs d'info au lieu de confier ça au débutants ?

    On peut tous faire avec, mais c'est très long à apprendre et très compliqué, mais c'est le plus performant actuellement et je pense encore pour longtemps.
    Par contre, je pense que pour des élèves, cela ne donnerait pas de fausses illusions !

    "
    paf a écrit:
    Bref quand on arrive en disant ce que j'ai mis en gras, à savoir que les gens du forum sont tous des nuls, des pseudo-informaticiens, des affabulateurs, des gens arriérés (quand on sait à quel point Python est utilisé dans le monde professionnel et à la mode, c'est drôle !), venir réclamer de la courtoisie, c'est l'hôpital qui se fout de la charité !!!
    "
    Pour, finir, pour un peu de crédibilité face à ces pseudo-informaticiens, ces affabulateurs, mais pas forcément arriérés, mais très prétentieux.
    En 1981 je faisais de la 3D sur Goupil, avec le 1er processeur Intel (Goupil a sauvé Intel), avec une télé couleur branchée sur la carte vidéo dans l'UC, pour afficher les images de la carte graphique. J'avais 14 ans.
    À 19 ans, j'étais en stage de BE, où je travaillais sur du calcul de RDM de Plaque en BE, pour des ponts bascules de pesage de camions ou locomotives (de 100 à 200 tonnes), avec les séries de fourrier [large]Fourier[/large] en 2D.
    Donc je pense avoir un peu plus de crédibilité que certains.

    Quant à spécifiquement @PAF, qui se cache derrière un pseudo, j'ai un message personnel (les autres ne vous sentez pas visé).
    "Tu es justement un de ces dogmatiques que je veux mettre à mal, ce que j'ai réussi à faire, car tu t'énerves. Va jouer plus loin, et laisse discuter les grands."
    Cordialement.

    [Joseph Fourier (1768-1830) mérite sa majuscule et le respect de son patronyme. AD]
  • B.Moraut a écrit:
    Mais l'EN n'aurai elle pas du recruter de Vrai profs d'info au lieu de confier ça au débutants ?

    On est bien d'accord mais elle ne s'en donne pas les moyens notamment financiers et elle vient à peine de créer un CAPES NSI. Si ça vous intéresse, passez-le, vous verrez bien !
    B.Moraut a écrit:
    Tu es justement un de ces dogmatiques que je veux mettre à mal, ce que j'ai réussi à faire vue que tu t'énerves.

    Monsieur, je ne suis pas dogmatique, je suis data scientist et j'utilise Python au quotidien comme la plupart des milliers de collègues qui font mon métier partout dans le monde.
    Je suis tout à fait d'accord sur l'importance de C et C++ parmi les développeurs, j'attends que vous en fassiez de même concernant Python et vu les réponses que vous avez faites ci-dessus sur ce sujet, je crois que je peux attendre longtemps : le dogmatisme en l'occurence n'est pas là où vous le croyez.
    Va jouer plus loin et laisse discuter les grands.

    Insulte signalée aux modérateurs !
  • Bonjour,

    Effectivement, les petits nouveaux désagréables qui débarquent en voulant faire leur loi, on s'en passerait bien.
    Ça ne donne pas envie de débattre de quoi que ce soit avec eux.
    Bon vent ...

    Cordialement,

    Rescassol

    PS de plus, tu n'as visiblement pas un master de français ni d'orthographe.
    Phrase n'ayant aucun sens:
    > Quand à MR @paf, je vais répondre ce qu'est un sect:
    On dit "Quant", MR n'existe pas en français (on dit "M."), "sect" non plus, sans parler de @.
  • Re-coucou,


    J'ai mis @PAF car c'était utilisé pour les citations dans un message plus haut...

    D'accord je fais des fautes de français de temps en temps, car je suis dyslexique. En plus je me suis trompé de touche en relisant --> j'ai appuyé sur envoyé au lieu d'aperçu pour corriger.

    Mais quel est le rapport avec notre discussion ?

    Data-scientist: whaou !

    "Bruno moraut le Troll" : signale aussi cette insulte pendant que tu y es, si tu es vraiment honnête !


    PS:
    quand je disais:
    "Votre secteur est protégé par des "Gardiens" auto-proclamés des mathématiques qui n'y connaissent rien".

    je ne parle pas des gens qui sont sur ce forum, mais de ceux , qui décident dans l'EN, des programmes scolaires.

    Ces même, sabordent même les maths, en enlevant certaines partie des programmes, qui font défaut en études supérieurs.

    Cordialement
  • Cela ne nous rajeunit pas tout ça. J'ai l'impression d'être revenu 20 ans en arrière, et de relire les interminables échanges sur IRC où tu te faisais traiter de lamer et de scriptkiddy parce que tu programmais avec un autre langage que l'assembleur. *
    Ce sera très certainement ma seule contribution à ce fil, je ne programme pas en Python parce que j'ai la paresse de m'y mettre. B-)-

    *: Enfin, moi j'échappais à ces critiques car je ne savais plus, à l'époque, que programmer en assembleur, debug et tasm étaient mes logiciels préférés. B-)
  • Monsieur Moraut,

    Vous semblez avoir une vision très claire de ce que vous pensez : Les bons développeurs se perdent, l'EN n'y voit goutte, comme il y a près de 40 ans avec le Basic. Pour ceux qui s'en rappellent, rien ne sortait dans le grand public à l'époque si ce n'était pas en Basic, puis c'est passé de mode...

    Mon expérience très limitée ne me permet pas de jouer dans la 'cour des grands' de la programmation, mais je continue occasionnellement à faire du Basic (même pas du Python, pourtant j'ai quelques bouquins dessus, rangés juste à côté de "l'Art du Beau Code", je ne sais pas si vous connaissez).

    Ce que j'ai par contre pu sentir, c'est tout l'intérêt de programmer dans un environnement qui n'est pas performant : Quand un problème (peu importe lequel) est implémenté naïvement sur un environnement qui ne fournit le résultat qu'au bout de 4 heures et qu'en réfléchissant une demi-heure sur le problème je parviens à obtenir le même résultat en 15 minutes, là j'ai évolué dans ma pratique.
    Si je sors le même problème sur un environnement élaboré, qu'il me faut 3 jours pour le paramétrer correctement et qu'enfin il me fournit le résultat en moins d'une milliseconde, je n'ai pas l'impression d'avoir bien évolué dans ma pratique, surtout que les environnements actuels ont la fâcheuse tendance à se réinventer tous les 6 mois.

    Dans la catégorie "anecdotes", un de mes copains, très fort en programmation, était une fois en bute avec un problème de précision sur un calcul qu'il devait déployer à grande échelle (calcul banquaire), il envisageait d'ajouter la bibliothèque de calcul en double précision pour régler le problème, j'ai regardé son problème 30 secondes, je lui ait dit d'intervertir l'ordre de deux opérations dans son calcul et son problème était résolu, il ne l'aurait pas été par l'ajout de la bibliothèque, juste repoussé plus loin.

    Si j'avais appris à programmer des environnements poussés, où on vous apprend à augmenter la puissance du matériel plutôt qu'à réfléchir aux améliorations logiques, je n'aurais sans doute pas pu l'aider aussi bien cette fois là.

    Maintenant, il est sûr que de la puissance de calcul supplémentaire est nécessaire. A part ajouter des cœurs supplémentaires dans les microprocesseurs, que font ceux qui "recherchent les améliorations continues". Sans vouloir jeter la pierre, il semble bien que la loi de Moore, qui a jalonné la plupart des progrès de l'informatique, ne remplit plus son office...

    Juste pour l'évoquer, je tiens à parler aussi du site "projecteuler.net" (désolé, je suis nouveau sur le forum, j'apprendrais à faire des liens aussi vite que possible). C'est un site où chacun peut développer des compétences informatiques qui sont plus dans le sens de ce que je défends dans ce message.

    Evidemment, avoir un environnement de développement élaboré aide grandement au début, mais par la suite, ce n'est plus si simple.
    Moi, je relève certains des défis de ce site en Basic (toujours lui), ce qui fait que je suis bien lent.
    L'avantage, c'est que je m'améliore quand je le veux, sans devoir réapprendre la roue à chaque fois.

    Et pour finir, n'oublions pas que ce cher Alan Turing à lancé sa "machine universelle" en précisant que ses performances devaient être de l'ordre de 100 opérations binaires par seconde, et il a fait bien des choses rien qu'avec cela.

    Cherche livres et objets du domaine mathématique :

    Intégraphes, règles log et calculateurs électromécaniques.

  • Ce fil est vraiment rigolo, on a un troll qui reproche à Python de n'être pas adapté à l'écriture de drivers et de SE ... pouf pouf.
    Moraut, tu as oublié de t'en prendre à JavaScript :-D
  • Dreamer a écrit:
    Moi, je relève certains des défis de ce site en Basic (toujours lui), ce qui fait que je suis bien lent.

    A l'époque où je trainais encore mes guêtres sur le site du projet Euler, il me semble que les deux outils informatisés les plus utilisés par les joueurs étaient: Python et PARI GP.

    Cela me fait me rappeler que j'ai passé douze ans à résoudre les quelques dizaines de problèmes du site, bien moins connu que le projet Euler:
    http://www.caesum.com/game/
  • Bruno Moraut :
    Il vaut mieux éviter de se vanter quand on s'inscrit sur un forum où l'on ne connaît pas les gens.
    En programmation -peut-être plus encore que dans de nombreux domaines- on trouve très rapidement quelqu'un qui a un meilleur niveau que soi, quand bien même on soit programmeur de métier. Sachez que votre expérience n'a rien d'extraordinaire même si je la respecte. J'ai commencé la programmation à 10 ans en 1989, mais j'aurais bien aimé la commencer une dizaine d'années plus tôt.
    Parmi les enseignants, il y a beaucoup de gens qui n'ont jamais aimé ou appris la programmation et qui peinent à rentrer dans ces nouveaux programmes d'enseignement de manière générale dans le "monde informatique", mais il y a aussi des gens qui sont passionnés de programmation.
    Il y a également sur ce forum de nombreux étudiants qui adorent programmer, que ce soit par loisir ou dans le cadre leurs études.
    En réalité, apprendre à programmer ne se fait ni dans les livres (ou du moins pas dans les livres de programmation spécifique à un langage), ni au lycée, ni à la fac.
    Je suis par contre persuadé qu'être très bon en mathématiques est un atout indéniable pour être un excellent programmeur, même si ce n'est pas suffisant.
    Quant à la programmation au lycée, et notamment au choix de python, il est évident : c'est en premier lieu sa facilité d'utilisation.
    Pour quelqu'un qui sait lire un minimum d'anglais, lire un programme en python revient quasiment à lire du pseudo-code : pour quelqu'un qui a déjà fait un peu de programmation, la transition au python se fait normalement sans effort.
    Il y a de nombreuses autres caractéristiques de ce langage qui en font un choix pas si bête que ça pour bien d'autres raisons.
    Évidemment, l'aspect performance n'en fait pas partie : et alors ? Tout le monde ne va pas faire programmeur plus tard, que je sache ! (ou ceux qui s'en serviront ne seront pas forcément des développeurs)
    Je ne pense pas que la programmation en python donne de mauvais réflexes pour quelqu'un qui va ensuite devenir programmeur de métier.
    J'ai commencé par la programmation en basic et sur calculatrice, cela ne m'a pas empêché d'accéder à d'autres langages (et éventuellement à n'importe quel langage de programmation).
    De toute façon, pour quelqu'un qui veut vraiment faire l'effort pour rentrer dans ce métier, il lui faudra réapprendre probablement un autre langage avec une syntaxe plus ou moins différente, mais son expérience ne sera pas perdue, peut-être même qu'avoir programmé en python sera un petit plus puisqu'il est sans conteste un des langages les plus utilisés au monde.
    Évidemment, comme disait mon professeur d'électronique en première, on n'a vraiment compris ce qu'est la programmation que quand on a compris comment un ordinateur fonctionne, et la programmation en C++ nécessite quand même d'avoir quelques rudiments concernant le matériel informatique.
    Pour en revenir à python, certaines remarques que vous faites à propos de ce langage laissent penser que vous ne le connaissez pas si bien que cela.
    Je pense que vous feriez mieux de ne pas déborder de votre domaine de prédilection, celui que vous maîtrisez puisque vous le pratiquez déjà depuis fort longtemps : la programmation en C++.
    Vous avez par contre tout à fait raison quant au fait que l'enseignement de la programmation n'a rien à faire dans un cours de mathématiques.
Cette discussion a été fermée.
Success message!