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.
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.
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