Implémentez "Tout ce dont vous avez besoin, c'est tuer" en Python

Une version de film d'action en direct de "Tout ce dont vous avez besoin est tuer" est sortie [diffusée dans tout le Japon le 4 juillet 2014](http: //wwws.warnerbros) .co.jp / edgeoftomorrow /) Pour commémorer cela, j'ai écrit la classe ʻAllYouNeedIsKill` en Python.

aynik.py


#!/usr/bin/env python3
# vim:fileencoding=utf-8

# Copyright (c) 2014 Masami HIRATA <[email protected]>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
#     1. Redistributions of source code must retain the above copyright notice,
#        this list of conditions and the following disclaimer.
#
#     2. Redistributions in binary form must reproduce the above copyright
#        notice, this list of conditions and the following disclaimer in the
#        documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.

__all__ = ['AllYouNeedIsKill']


class AllYouNeedIsKill:
    def __init__(self, iterable):
        self._iter_source = iter(iterable)
        self._buffer = []
        self._iter_buffer = None

    def __iter__(self):
        return self

    def __next__(self):
        if self._iter_buffer is not None:
            try:
                return next(self._iter_buffer)
            except StopIteration:
                self._iter_buffer = None
        value = next(self._iter_source)
        self._buffer.append(value)
        return value

    def rewind(self):
        if self._buffer:
            self._iter_buffer = iter(self._buffer)
        else:
            self._iter_buffer = None

    def reset(self):
        if self._iter_buffer is not None:
            self._buffer = list(self._iter_buffer)
            self.rewind()
        else:
            self._buffer = []

Une instance de la classe ʻAllYouNeedIsKill se comporte comme un itérateur avec la méthode rewind () pour le rembobinage et la méthode reset ()` pour partir de l'état au moment de l'exécution ajoutée à l'itérateur de l'objet argument. ..

L'échantillon est ci-dessous.

>>> from itertools import count  # count()Est un itérateur qui ne cesse de compter
>>> from aynik import AllYouNeedIsKill
>>> counter = AllYouNeedIsKill(count(1))
>>> next(counter)
1
>>> next(counter)
2
>>> counter.rewind()  #Effectuer le rembobinage
>>> next(counter)  #Rewound pour qu'il devienne 1
1
>>> next(counter)
2
>>> counter.reset()  #À partir de l'état actuel
>>> next(counter)
3
>>> counter.rewind()  #Effectuer le rembobinage
>>> next(counter)  #La valeur de retour sera 3 au lieu de 1
3
>>> 

La classe ʻAllYouNeedIsKill me permet également de gérer des itérateurs de longueur infinie, mais elle est implémentée comme une classe plutôt qu'une fonction, et elle est entrée comme certains outils dans la bibliothèque standard ʻitertools. Veuillez noter que le code n'est pas semblable à Python en raison de performances médiocres dues au non déploiement d'itérateurs sur taples.

ʻAynik.py` sera publié sous une licence BSD à deux clauses, alors n'hésitez pas à l'utiliser.

Recommended Posts

Implémentez "Tout ce dont vous avez besoin, c'est tuer" en Python
Mettre en œuvre des recommandations en Python
Implémenter XENO avec python
Implémenter sum en Python
À propos de __all__ en python
Implémenter Traceroute dans Python 3
Implémenter Naive Bayes dans Python 3.3
Implémenter d'anciens chiffrements en python
Implémenter Redis Mutex en Python
Implémenter l'extension en Python
Mettre en œuvre un RPC rapide en Python
Implémenter l'algorithme de Dijkstra en python
Implémenter le bot de discussion Slack en Python
(Peut-être) Test d'analyse des données de certification d'ingénieur Python 3 que vous pouvez passer par lui-même
Mettre en œuvre l'apprentissage de l'empilement en Python [Kaggle]
Implémenter la fonction power.prop.test de R en python
Différence entre == et est en python
Utilisez le tissu tel quel en python (fabric3)
Python est UnicodeEncodeError dans le menu fixe CodeBox
Avez-vous besoin de Python re.compile?
Jusqu'à ce que vous mettiez Python dans Docker
Il n'y a pas de commutateur en python
Implémentez rapidement l'API REST en Python
Python in est aussi un opérateur
Comment utiliser l'astérisque (*) en Python. C'est peut-être tout? ..
[Python] Lorsque vous souhaitez utiliser toutes les variables dans un autre fichier
Implémenter __eq__ etc. de manière générique dans la classe Python
"<" En python> pack ("<L", ...) est un peu todian
J'ai essayé d'implémenter la permutation en Python
Inject est recommandé pour DDD en Python
Implémenter le filtre FIR en langage Python et C
J'ai essayé d'implémenter PLSA dans Python 2
Qu'est-ce que "mahjong" dans la bibliothèque Python? ??
Hash en Perl est un dictionnaire en Python
J'ai essayé d'implémenter ADALINE en Python
Comment utiliser is et == en Python
[Python] Combine tous les éléments dans un tableau
Essayez d'implémenter Oni Mai Tsuji Miserable avec python
Qu'est-ce que la «programmation fonctionnelle» et «orientée objet»? Édition Python
Qu'est-ce que wheezy dans l'image Docker Python?
Comment implémenter la mémoire partagée en Python (mmap.mmap)
À propos de la différence entre "==" et "is" en python
J'ai essayé d'implémenter TOPIC MODEL en Python
[Implémentation pour l'apprentissage] Implémentation de l'échantillonnage stratifié en Python (1)
Pourquoi vous êtes intéressé par le contrôle moteur en Python
J'ai essayé d'implémenter le tri sélectif en python
Implémenter l'algorithme PRML en Python (presque uniquement Numpy)
Quadtree en Python --2
Python en optimisation
CURL en Python
Géocodage en python
SendKeys en Python
Python est facile
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python