Journal Pythreries - Perl ou Python?

Posté par (page perso) . Licence CC by-sa.
Tags :
22
6
jan.
2019

Demat' iNal

Au hasard d'un nouveau projet autour de l'analyse du langage Python, j'ai découvert quelques détails du langage Python que l'on peut résumer en cette simple ligne:

def _(*,_=...): [...]

outre l'aspect très perlesque de cette ligne, elle illustre plusieurs détails cocasses :

  1. Il est possible de réutiliser le nom de la fonction dans un de ces arguments, et c'est l'argument qui a la priorité

  2. C'était la première fois que je voyais la syntaxe avec une astérisque seule dans une liste d'argument, pour forcer l'usage de paramètres nommés pour les arguments suivants

  3. L'ellipse (...) est une expression valide partout où une expression est possible. On ne peut pas faire grand chose avec, mais elle est là!

Voilou, cette fonction est inutile mais elle compile, c'est déjà ça!

  • # L’usage d’underscore dans les noms d’objet

    Posté par . Évalué à 3 (+1/-1).

    Notons que l’utilisation d’_ en Python est soumise à des conventions. Notamment, une fonction qui commence par _ est supposée être privée. En pratique elle ne sera pas importée avec un from module import * (elle pourrait toujours être appelée directement cela-dit)

    https://hackernoon.com/understanding-the-underscore-of-python-309d1a029edc?gi=7409e65729f4

    • [^] # Re: L’usage d’underscore dans les noms d’objet

      Posté par . Évalué à 5 (+7/-4). Dernière modification le 06/01/19 à 16:27.

      Ouai mais bon ce n'est qu'une convention. Quasiment tous les langages ont pour convention qu'il faut indenter le code. Python s'est dis qu'une convention ça ne suffisait pas.

      • [^] # Re: L’usage d’underscore dans les noms d’objet

        Posté par . Évalué à 3 (+1/-0).

        Si ce n'est que l'usage des underscores a semble-t-il des implications (voir commentaire plus haut). Dans la plupart des langages, l'indentation ou le manque d’indentation n'a pas vraiment d'impact.

        • [^] # Re: L’usage d’underscore dans les noms d’objet

          Posté par . Évalué à 2 (+2/-2).

          Le globbing * ne la match pas, c'est la seule particularité. Mais mon point c'est juste de mettre l'emphase sur le fait que Marotte parle juste de bonnes pratiques.

          Avec des bonnes pratiques tous les langages sont aussi fiables et performants les uns que les autres.

    • [^] # Re: L’usage d’underscore dans les noms d’objet

      Posté par (page perso) . Évalué à 8 (+6/-0).

      _ tout court est utilisé par convention pour assigner une variable qui n'est pas utilisée. L'exemple typique est for _ in range(3): print('Bonjour') : l'itérateur est inutilisé. Autre exemple : nom, _, domaine = email.partition('@'), le 2e élément du résultat ("@") est ignoré. J'ai vu des cas avec plusieurs _ : x, y, _, _, z = func(). Bon, il ne faut pas en abuser :-) C'est purement une convention, la variable existe et on peut la lire :-)

      Dans le REPL, _ est une variable magique qui contient le dernier résultat. Magique car elle est définie dans le module builtins : c'est la variable builtins._.

      $ python3
      >>> 1+1
      2
      >>> _
      2
      >>> import builtins; builtins._
      2
      
  • # Pitreries

    Posté par . Évalué à -1 (+4/-5). Dernière modification le 06/01/19 à 17:27.

    J’ai mis du temps avant de comprendre…

  • # Et ça ?

    Posté par . Évalué à 7 (+4/-0).

    [](){}();

    Indice: ce n'est pas du Python mais c'est un autre langage que l'auteur du journal apprécie ;)

  • # Comme quoi

    Posté par . Évalué à 3 (+1/-0). Dernière modification le 08/01/19 à 12:01.

    Même avec python on peut faire du code illisible

    C'est ce qui m'a fait abandonner le perl … la lisibilité surtout avec des scripts qui marche trop bien
    et que tu ne modifies que tout les 2 ou 3 ans

    Reste maintenant à trouver l'utilité de cette expression

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.