Generieren Sie Fibonacci-Zahlen mit Python-Closures, Iteratoren und Generatoren

Schreiben wir den Code, um die Fibonacci-Zahl mit Pythons Closure, Iterator und Generator zu generieren.

Zuallererst die Schließung.

Python


def fibonacci_closure():
    values = []
    def fibonacci():
        if not values:
            values.append(0)
            return values[0]
        elif len(values) == 1:
            values.append(1)
            return values[1]
        else:
            next_fib = sum(values)
            values[0], values[1] = values[1], next_fib
            return next_fib
    return fibonacci

next_fibonacci = fibonacci_closure()

for i in range(17):
    fib = next_fibonacci()
    print fib,

Ergebnis


 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

Als nächstes kommt der Iterator.

Python


class FibonacciIterator(object):
    def __init__(self):
        self.values = []
    def __iter__(self):
        return self
    def next(self):
        if not self.values:
            self.values.append(0)
            return self.values[0]
        elif len(self.values) == 1:
            self.values.append(1)
            return self.values[1]
        else:
            next_fib = sum(self.values)
            self.values[0], self.values[1] = self.values[1], next_fib
            return next_fib

for fib in FibonacciIterator():
    if fib > 1000:
        break
    print fib,

Ergebnis


 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

Endlich der Generator.

Python


def fibonacci_generator():
    values = [0, 1]
    yield 0
    yield 1
    while True:
        next_fib = sum(values)
        values[0], values[1] = values[1], next_fib
        yield next_fib

for fib in fibonacci_generator():
    if fib > 1000:
        break
    print fib,

Ergebnis


 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

Der Generator kann sehr präzise geschrieben werden.

Es ist jedoch besser, es in einen Container zu verwandeln, da es eine unerwartete Sucht gibt, den Generator so zu schreiben.

Python


class FibonacciGenerator(object):
    def __iter__(self):
        values = [0, 1]
        yield 0
        yield 1
        while True:
            next_fib = sum(values)
            values[0], values[1] = values[1], next_fib
            yield next_fib

for fib in FibonacciGenerator():
    if fib > 1000:
        break
    print fib,

Ergebnis


 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

Mehr dazu in einem anderen Artikel.

Enjoy!

Recommended Posts

Generieren Sie Fibonacci-Zahlen mit Python-Closures, Iteratoren und Generatoren
Python Iterator und Generator
Erzeugung von zwei korrelierten Pseudozufallszahlen (mit Python-Beispiel)
[Python] Ein grobes Verständnis von Iterablen, Iteratoren und Generatoren
Generiere n korrelierte Pseudozufallszahlen (mit Python-Beispiel)
Programmieren mit Python und Tkinter
Python und Hardware-Verwenden von RS232C mit Python-
Generieren Sie XML (RSS) mit Python
Beurteilung von Primzahlen mit Python
Implementierung von Fibonacci und Primzahlen (Python)
Python-Listeneinschlussnotation und Generator
Python mit Pyenv und Venv
Funktioniert mit Python und R.
Sehen wir uns die Sprachspezifikationen für Python-Iteratoren und -Generatoren an
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Leuchtendes Leben mit Python und OpenCV
Sortieren mit einer Mischung aus Zahlen und Buchstaben
Spielen Sie handschriftliche Zahlen mit Python Part 1
Roboter läuft mit Arduino und Python
Testen mit Zufallszahlen in Python
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
Neuronales Netzwerk mit OpenCV 3 und Python 3
Scraping mit Node, Ruby und Python
Scraping mit Python, Selen und Chromedriver
Kratzen mit Python und schöner Suppe
JSON-Codierung und -Decodierung mit Python
Hadoop-Einführung und MapReduce mit Python
[GUI in Python] PyQt5-Drag & Drop-
Ich habe mit PyQt5 und Python3 gespielt
[Python] Generiere ein Passwort mit Slackbot
Lesen und Schreiben von CSV mit Python
Mehrfachintegration mit Python und Sympy
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Sugoroku-Spiel und Zusatzspiel mit Python
FM-Modulation und Demodulation mit Python
Kommunizieren Sie mit gRPC zwischen Elixir und Python
Datenpipeline-Aufbau mit Python und Luigi
Berechnen Sie das Standardgewicht und zeigen Sie es mit Python an
Überwachen Sie Mojo-Ausfälle mit Python und Skype
Spielen Sie handschriftliche Zahlen mit Python Teil 2 (identifizieren)
FM-Modulation und Demodulation mit Python Part 3
Python-Installation und Paketverwaltung mit pip
Generieren Sie japanische Testdaten mit Python faker
Verwenden von Python und MeCab mit Azure Databricks
POST verschieden mit Python und empfange mit Flask
Bilder mit Pupil, Python und OpenCV aufnehmen
Fraktal zum Erstellen und Spielen mit Python
Ein Memo mit Python2.7 und Python3 in CentOS
Verwenden Sie PIL oder Pillow mit Cygwin Python
Erstellen und entschlüsseln Sie Caesar-Code mit Python
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
Lesen und Schreiben von JSON-Dateien mit Python
Umgang mit "Jahren und Monaten" in Python
Ich habe Numba mit Python3.5 installiert und verwendet
Tweet-Analyse mit Python, Mecab und CaboCha
Verknüpfung von Python und JavaScript mit dem Jupiter-Notizbuch
Berechnen Sie die Fibonacci-Sequenz mit Generator und Iterator
FM-Modulation und Demodulation mit Python Part 2