Je voulais faire quelque chose comme la pipe d'Elixir en Python

Exemple de traitement de tuyaux

Récemment (dans mon esprit) le sujet d'Elixir. C'est un langage fonctionnel moderne qui n'est pas aussi robuste que Haskell. Elixir a de nombreux charmes, mais parmi eux, le traitement des fonctions de pipe est en moi. Je l'aime beaucoup.

Un tel mec

[1, [2], 3, [4, 5] |> List.flatten |> Enum.map(&(&1 * 2))

Vous pouvez transmettre la valeur de retour à la fonction de droite en utilisant l'opérateur «|>».

J'utilise Python et j'aimerais pouvoir créer plusieurs fonctions comme ci-dessus.

Ce qui a été fait

Je l'ai fait comme ça.

def hoge(a, b, c, d) :
  return a+b+c+d

pipe([1,2], 
  [
    pmap(lambda x: x*2),
    list,
    to(hoge, [3, 4]),
    print
  ]
)

pipe / 2, to / 2, pmap / 1 sont ceux que j'ai créés. Chaque rôle est pipe Le premier argument est la valeur initiale du traitement du tube et le deuxième argument est la liste des fonctions. La mise en œuvre est

from functools import reduce
def pipe(elm, fn_list) :
    return reduce(lambda x, f: f(x), fn_list, elm)

to Une fonction d'ordre supérieur qui convertit une fonction auto-créée en une forme adaptée à une fonction de tube. La mise en œuvre est

def to(fn, outer_args=None) :
    def _to(inner_args) :
        args = outer_args+inner_args if not outer_args == None else inner_args
        return fn(*args)
    return _to

pmap Fonction de carte existante enveloppée pour la fonction de tuyau En plus de cela, réduire et filtrer sont également fabriqués, mais pour le moment

La mise en œuvre est

def pmap(fn) :
    def _pmap(li) :
        return map(fn, li)
    return _pmap

Impressions

Je suis satisfait parce que j'ai pu faire ce que je voulais faire simplement en faisant quelque chose d'assez simple. Cependant, le style d'écriture est très différent du style d'écriture standard, j'ai donc pensé que je ne pouvais l'utiliser qu'avec mon propre code.

Recommended Posts

Je voulais faire quelque chose comme la pipe d'Elixir en Python
Je veux faire quelque chose avec Python à la fin
Je veux améliorer l'efficacité avec Python même dans un système expérimental (3) Je veux faire quelque chose comme Excel avec Pandas
Je voulais résoudre ABC159 avec Python
Faites quelque chose comme les transactions Redis en Python
Je voulais le faire comme exécuter un cas de test pour AtCoder.
[Apprentissage automatique] J'ai essayé de faire quelque chose comme passer des images
Je veux faire le test de Dunnett en Python
Je veux manipuler des chaînes dans Kotlin comme Python!
Faites quelque chose comme un interpréteur Python avec Visual Studio Code
Quelque chose comme JS setTimeout en python
Une alternative à `pause` en Python
Quelque chose comme tail -f en Python
J'ai vu ce commit et j'ai pensé que je voulais quelque chose comme la version rake: bump en Python aussi
Une histoire que je voulais faire quand j'ai eu une liste de sessions d'étude avec Python
Une histoire que je voulais faire une fonction comme before_action utilisée dans les rails avec django [Débutant apprend python avec un livre de référence]
J'ai essayé d'implémenter PLSA en Python
J'ai essayé d'implémenter la permutation en Python
Comment faire R chartr () en Python
J'ai essayé d'implémenter PLSA dans Python 2
Je voulais résoudre ABC160 avec Python
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé d'implémenter PPO en Python
Essayez quelque chose comme Python for-else dans Ruby
Je voulais résoudre ABC172 avec Python
Implémentation de DQN avec TensorFlow (je voulais ...)
# J'ai essayé quelque chose comme Vlookup avec Python # 2
[Python] J'ai essayé de résumer le type collectif (ensemble) d'une manière facile à comprendre.
C'est plus récent, mais je voulais essayer le calcul de l'IMC avec python.
Après tout, que dois-je utiliser pour faire des comparaisons de types en Python?
Je veux faire un patch monkey seulement en partie en toute sécurité avec Python
Je voulais résoudre NOMURA Contest 2020 avec Python
[Python] Ce que j'ai fait pour faire un test unitaire
Python: j'ai pu récurer en lambda
Implémentation minimale d'Union Find en Python
Je voulais installer Python 3.4.3 avec Homebrew + pyenv
J'ai écrit "Introduction à la vérification des effets" en Python
Je veux fusionner des dictionnaires imbriqués en Python
J'ai essayé d'implémenter TOPIC MODEL en Python
Que faire pour obtenir une feuille de calcul Google en Python
J'ai essayé d'implémenter le tri sélectif en python
Je veux afficher la progression en Python!
Je veux écrire en Python! (1) Vérification du format de code
Que faire lorsque l'imitation est intégrée à Python
J'ai essayé de représenter graphiquement les packages installés en Python
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
J'obtiens une erreur d'importation avec Python Beautiful Soup
Je veux écrire en Python! (2) Écrivons un test
Même avec JavaScript, je veux voir Python `range ()`!
J'ai essayé d'implémenter un pseudo pachislot en Python
Que faire si la commande d'impression elle-même provoque une erreur dans le python de Maya
Je voulais utiliser la bibliothèque Python de MATLAB
Je veux échantillonner au hasard un fichier avec Python
J'ai essayé d'implémenter le poker de Drakue en Python
Que faire si vous obtenez une erreur lors de l'importation de matplotlib en Python (Mac)
J'étais accro au grattage avec Selenium (+ Python) en 2020
J'ai essayé d'implémenter le perceptron artificiel avec python
Je veux travailler avec un robot en python.
J'ai essayé d'implémenter GA (algorithme génétique) en Python