Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

index.md 2.2KB

12345678910111213141516171819202122232425262728293031323334
  1. title: Python et namedtuples
  2. > Many functional programming articles teach abstract functional techniques. That is, composition, pipelining, higher order functions. This one is different. It shows examples of imperative, unfunctional code that people write every day and translates these examples to a functional style.
  3. >
  4. > <cite>*[A practical introduction to functional programming](http://maryrosecook.com/blog/post/a-practical-introduction-to-functional-programming)* ([cache](/david/cache/437dce93077f9a2569566bfcfe47134d/))</cite>
  5. Dans les épisodes précédents, on a vu comment [récupérer des billets voisins](/david/stream/2015/01/25/) et [parcourir des fichiers markdown](/david/stream/2015/02/03/). Il est temps de combiner les deux. Mais avant cela, commençons par gérer des objets par l’intermédiaire des `namedtuples` qui facilitent l’accès aux attributs :
  6. :::python
  7. Post = namedtuple('Post', ['content', 'author', 'date'])
  8. def populate_post(content, metadata):
  9. # Divers traitements.
  10. return Post(title=title, date=date_, content=content)
  11. Cette méthode va nous permettre de générer des `posts` à partir du contenu et des métadonnées de notre fichier *markdown*. On va ensuite vouloir récupérer une liste ordonnée par date :
  12. :::python
  13. def collection():
  14. """Retrieve all posts sorted by date desc."""
  15. posts = []
  16. for file_path in each_markdown_from(POSTS_PATH):
  17. content, metadata = parse_markdown(file_path)
  18. post = populate_post(content, metadata)
  19. posts.append(post)
  20. return sorted(posts, key=attrgetter('date'), reverse=True)
  21. C’est cette liste dont on peut utiliser les voisins pour la génération du fichier `HTML` final :
  22. :::python
  23. for previous, post, next in neighborhood(collection(), last=thoughts):
  24. # On peut ici accéder à post.title, post.content, etc.
  25. J’aurais pu rendre tout cela encore plus fonctionnel mais je préfère pouvoir vérifier facilement les étapes intermédiaires sans qu’il y ait trop d’imbrications incompréhensibles. C’est la fin de cette série, vous avez maintenant les outils pour créer votre propre moteur de blog statique !