Ein netter Nimporter, der Nim und Python verbindet

Modul, das Saitsuyos nim + python verbindet

Ich möchte ein Modul namens nimporter vorstellen, weil es sehr bewegend war. Nein, die Einführung selbst mag die n-te Abkochung sein, aber es scheint, dass sie nicht gut bekannt ist. https://github.com/Pebaz/Nimporter Kurz gesagt, es ist der Typ, der den ultraschnellen Code von nim in Python wie ein Interpreter ausführt.

Hier ist ein Auszug aus dem offiziellen Beispiel, aber der Nim-Code sieht folgendermaßen aus:

import nimpy

proc add(a: int, b: int): int {.exportpy.} =
    return a + b

Der Python-Code lautet wie folgt

# Nimporter is needed prior to importing any Nim code
import nimporter, nim_math

print(nim_math.add(2, 4))  # 6

Wenn Sie es schreiben, ** wird es automatisch kompiliert und importiert **. Nein, es ist wirklich eine Dolmetschersprache! Es wird sein.

Versprochener Geschwindigkeitsvergleich

Wagen wir es, die Fibonacci-Zahlenfolge mit langsamer Rekursion zu berechnen. Der Code für nim ist unten.

fibnim.nim


import nimpy
proc fib(n: int): float {.exportpy.}=
    if n == 1:
        return 0
    elif n == 2:
        return 1
    else:
        return fib(n - 1) + fib(n - 2)

Für Python siehe unten.

fibpy.py


def fib(n: int) -> float:    
    if n == 1:
        return 0.
    elif n == 2:
        return 1.
    else:
        return fib(n - 1) + fib(n - 2)

... aber es sieht aus wie Kusso. Importieren wir diese beiden mit Python und vergleichen sie.

import fibpy
import nimporter, fibnim
from time import time
cycle = 36
t = time()
print(fibnim.fib(cycle))
print('Time of nim is {} sec'.format(str(time() - t)))
t = time()
print(fibpy.fib(cycle))
print('Time of python is {} sec'.format(str(time() - t)))

>>> 9227465.0
>>> Time of nim is 0.026133298873901367 sec
>>> 9227465.0
>>> Time of python is 3.1436727046966553 sec

Das erste Mal zu kompilieren braucht Zeit, aber nach dem zweiten Mal ist es 100 Mal oder mehr.

Ist Cython überhaupt nutzlos?

Nicht schlecht. Eher der erste Kandidat. Cython ist heutzutage auch recht einfach zu bedienen Es ist eine Ebene, die Sie ohne Änderung von Python migrieren können, wenn Sie Python mit Typhinweis in den reinen Python-Modus einspeisen. [^ ikou]

[^ ikou]: Wenn Sie nicht hart am Tuning arbeiten, wird es nicht schneller

cythonize -i hoge.py

Sie können ein solches Modul erstellen, aber ist es schwierig, einmal zur Bash zurückzukehren? Außerdem verwendet Cython manchmal Python Ich habe das Gefühl, dass es Zeiten gibt, in denen es bei der Optimierung für Späne unerwartet problematisch ist.

Recommended Posts

Ein netter Nimporter, der Nim und Python verbindet
Erstellen Sie den Code, der in Python "A und vorgeben B" ausgibt
So schreiben Sie eine Meta-Klasse, die sowohl Python2 als auch Python3 unterstützt
Python a + = b und a = a + b sind unterschiedlich
Dies und das von Python-Eigenschaften
[Python] gibt A [oder / und] B zurück
Pythons regulärer Ausdruck, str und unicode sind nüchtern
[LINE Messaging API] Erstellen Sie einen BOT, der eine Verbindung zu jemandem mit Python herstellt
Eine Kurzanleitung zu PyFlink, die Apache Flink und Python kombiniert
Ein Python-Skript, das auf dem Mac erstellte ._DS_Store- und ._ * -Dateien löscht
[Python] Ein Programm, das Treppen mit # erstellt
Ein Memo mit Python2.7 und Python3 in CentOS
Verbinde viel Python oder und und
Ein Python-Programm, das die Größe eines Videos ändert und es in ein Bild verwandelt
[Python] Erstellen Sie einen LineBot, der regelmäßig ausgeführt wird
Eine Geschichte über Python Pop und Append
Eine typisierte Welt, die mit Python beginnt
Ein Programm, das Python zum Abspielen von Junk verwendet
[Python] Wann, wo, wer und welches Spiel mit regulären Ausdrücken
[Python] Ein Programm, das die Partitur rundet
[Python, PyPDF2] Ein Skript, das ein verbreitetes PDF in zwei links und rechts unterteilt
Python-Skript, das SQL-Dateien liest, BigQuery ausführt und CSV speichert
[Python] Ich habe einen LINE-Bot erstellt, der Gesichter erkennt und Mosaikverarbeitungen durchführt.
Ich möchte ein Programm ausführen und verteilen, das die Größe von Bildern in Python3 + Pyinstaller ändert
[Python] Ein Programm, das die minimalen und maximalen Werte ohne Verwendung von Methoden findet
[Python] Ein Programm, das die Anzahl der Aktualisierungen der höchsten und niedrigsten Datensätze berechnet
Organisieren Sie Python-Module und -Pakete in einem Chaos
Ein Memo, das ich schnell in Python geschrieben habe
[Python] Ein Tool, das einen intuitiven relativen Import ermöglicht
Erstellen einer Python-Umgebung mit virtualenv und direnv
[Python / Tkinter] Eine Klasse, die einen scrollbaren Frame erstellt
ffmpeg-Erstellen Sie eine Python-Umgebung und teilen Sie das Video
Ich habe eine Klasse in Python3 und Java geschrieben
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
Ein Programm, das doppelte Anweisungen in Python entfernt
Warum ich ein Java-Shop bin und Python starte
Veröffentlichen Sie ein Python-Modul, das meteorologische Elemente berechnet
Erstellen Sie eine Webmap mit Python und GDAL
"Python Kit", das Python-Skripte von Swift aufruft
Starten Sie einen Webserver mit Python und Flask
Python: Erstellen Sie eine Klasse, die entpackte Zuweisungen unterstützt
Schreiben wir ein Python-Programm und führen es aus
Python-Memo- "wenn nicht A und B" war "wenn (nicht A) und B"
Vim-Plug-In, das automatisch Python-Stile formatiert
Eine Geschichte über das Ändern von Python und das Hinzufügen von Funktionen
[Python] Ein grobes Verständnis von Iterablen, Iteratoren und Generatoren
Berücksichtigung der Stärken und Schwächen von Python
Ein Programm, das ein paar Kilogramm BMI und Standardgewicht verlangt [Python]
Erstellen Sie einen Discord-Bot, der einseitig mit Python benachrichtigt (nur Anfragen und JSON werden verwendet).
Eine Python-Client-App, die Dateien aus S3 herunterlädt und löscht, indem ein Bucket angegeben wird
Ein Skript, das Ihre bevorzugten Python-Module und Binärdateien in einer einzigen Lambda-Ebene kombiniert
[Python] Ein Notizbuch, das die ipynb-Datei von GitHub ins Japanische übersetzt und herunterlädt.
Eine Geschichte, die Seaborn einfach, bequem und beeindruckt war
[Python] Ein Programm, das die Anzahl der Täler zählt
Python: Erstellen einer virtuellen Umgebung (venv), Starten und Stoppen
Versuchen Sie, eine komprimierte Datei mit Python und zlib zu erstellen
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
Schreiben wir Python-Code, der Go-Code analysiert und Go-Code generiert