Implementieren Sie "Alles was Sie brauchen ist töten" in Python

Eine Live-Action-Filmversion von "Alles was du brauchst ist töten" wurde veröffentlicht [veröffentlicht in ganz Japan am 4. Juli 2014](http: //wwws.warnerbros) .co.jp / edgeoftomorrow /) Ich habe die Klasse "AllYouNeedIsKill" in Python geschrieben, um daran zu erinnern.

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 = []

Eine Instanz der Klasse "AllYouNeedIsKill" verhält sich wie ein Iterator mit der Methode "rewind ()" zum Zurückspulen und der Methode "reset ()" zum Starten vom Status zum Zeitpunkt der Ausführung, die dem Iterator des Argumentobjekts hinzugefügt wurde. ..

Das Beispiel ist unten.

>>> from itertools import count  # count()Ist ein Iterator, der einfach weiter zählt
>>> from aynik import AllYouNeedIsKill
>>> counter = AllYouNeedIsKill(count(1))
>>> next(counter)
1
>>> next(counter)
2
>>> counter.rewind()  #Rücklauf durchführen
>>> next(counter)  #Zurückgespult, so dass es 1 wird
1
>>> next(counter)
2
>>> counter.reset()  #Ausgehend vom aktuellen Status
>>> next(counter)
3
>>> counter.rewind()  #Rücklauf durchführen
>>> next(counter)  #Der Rückgabewert ist 3 anstelle von 1
3
>>> 

Mit der Klasse "AllYouNeedIsKill" kann ich auch Iteratoren mit unendlicher Länge verarbeiten, sie ist jedoch eher in einer Klasse als in einer Funktion implementiert und wie einige Tools in der Standardbibliothek "itertools" typisiert. Beachten Sie, dass der Code aufgrund der schlechten Leistung nicht Python-ähnlich ist, da keine Iteratoren für Taples bereitgestellt werden.

aynik.py wird unter einer BSD-Lizenz mit zwei Klauseln veröffentlicht. Sie können sie also gerne verwenden.

Recommended Posts

Implementieren Sie "Alles was Sie brauchen ist töten" in Python
Implementieren Sie XENO mit Python
Implementieren Sie sum in Python
Über __all__ in Python
Implementieren Sie Traceroute in Python 3
Implementieren Sie Naive Bayes in Python 3.3
Implementieren Sie alte Chiffren in Python
Implementieren Sie Redis Mutex in Python
Implementieren Sie die Erweiterung in Python
Implementieren Sie schnelles RPC in Python
Implementieren Sie den Dijkstra-Algorithmus in Python
Implementieren Sie den Slack Chat Bot in Python
(Möglicherweise) Python 3 Engineer-Zertifizierungsdatenanalyse-Test, den Sie selbst bestehen können
Implementieren Sie das Stacking-Lernen in Python [Kaggle]
Implementieren Sie die Funktion power.prop.test von R in Python
Unterschied zwischen == und ist in Python
Verwenden Sie Stoff wie in Python (Stoff3)
Python ist UnicodeEncodeError im CodeBox-Docker
Benötigen Sie Python re.compile?
Bis Sie Python in Docker einfügen
In Python gibt es keinen Schalter
Implementieren Sie die REST-API schnell in Python
Python in ist auch ein Operator
Verwendung von Sternchen (*) in Python. Vielleicht ist das alles? ..
[Python] Wenn Sie alle Variablen in einer anderen Datei verwenden möchten
Implementieren Sie __eq__ usw. generisch in der Python-Klasse
"<" In Python> Pack ("<L", ...) ist wenig todian
Ich habe versucht, Permutation in Python zu implementieren
Inject wird für DDD in Python empfohlen
Implementieren Sie den FIR-Filter in Python und C.
Ich habe versucht, PLSA in Python 2 zu implementieren
Was ist "Mahjong" in der Python-Bibliothek? ??
Hash in Perl ist ein Wörterbuch in Python
Ich habe versucht, ADALINE in Python zu implementieren
Verwendung ist und == in Python
[Python] Kombinieren Sie alle Elemente in einem Array
Versuchen Sie, Oni Mai Tsuji Miserable mit Python zu implementieren
Was ist "funktionale Programmierung" und "objektorientiert"? Python Edition
Was ist im Docker Python-Image pfeifend?
So implementieren Sie Shared Memory in Python (mmap.mmap)
Über den Unterschied zwischen "==" und "is" in Python
Ich habe versucht, TOPIC MODEL in Python zu implementieren
[Implementierung zum Lernen] Implementieren Sie Stratified Sampling in Python (1)
Warum Sie sich für Motorsteuerung in Python interessieren
Ich habe versucht, eine selektive Sortierung in Python zu implementieren
Implementieren Sie den PRML-Algorithmus in Python (fast nur Numpy)
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Geokodierung in Python
SendKeys in Python
Python ist einfach
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python