Рубрики
Без рубрики

Python/Cython/NIM Cheatsheet

Чит -лист сравнивает Python, Cython, Nim. Tagged с Python, Cython, Nim.

Это предназначено для сравнения дружелюбия письма и легкого чтения Анкет Нет теста производительности.

Python 3 к Цифон Cheatsheet, с короткими примерами, так же простым, как позитивный, Потому что я не могу найти чит -лист цинтона в Интернете. Это также добавляет Ним. Он начинается с простых вещей и продолжает к более сложным. Все значения и имена переменных являются примерами значений.

Цифон и NIM являются альтернативами, чтобы сделать Python быстрее (скомпилирован) и безопаснее (сильное статическое набор) Анкет

Небольшие целые числа

  • У Python нет типов для средних целых чисел или небольших целых чисел.

Цифон (средние целые числа)

cdef int a
a = 1

Ним + Насасывать

var a = 1

Большие целые числа

Питон

a = 100000000

Кифон

cdef longlong a
a = 100000000

Ним + Насасывать

var a = 100000000
  • NIM необязательно может использовать явное int8 () , int16 () , int32 () , int64 () , int () Анкет

Не подписываемые целые числа

  • Python не имеет типов для положительных целых чисел и не знаковых целых чисел.

Цифон (без подписных положительных целых чисел)

ctypedef unsigned a
a = 1

Ним + Насасывать

var a = Positive(1)
  • Ним имеет Положительный () Начиная с 1 и Естественный() Начиная с 0 Анкет
  • NIM необязательно может использовать явное uint8 () , uint16 () , uint32 () , uint64 () , uint () Анкет
  • Цифон не имеет типов для ненулевых значений.

Строки

Питон

a = "foo"

Кифон

cdef char* a
a = "foo"

Ним + Насасывать

var a = "foo"

F-стрит

Питон

a = f"foo {variable} {1 + 2} bar"
  • Цифон не имеет типов F-Strings.

Ним + Насасывать

import strformat

var a = fmt"foo {variable} {1 + 2} bar"
  • NIM нуждается Импорт Strformat , они могут быть временем компиляции.

Маленькие поплавки

  • Python не имеет типов для небольших поплавок.

Цифон (маленькие поплавки)

cdef double a
a = 1.0

Ним + Насасывать

var a = 1.0

Большие поплавки

  • Python не имеет типов для средних поплавок.

Цифон (средние поплавки)

cdef long double a
a = 1.000001

Ним + Насасывать

var a = 1.000001

Python (большие поплавки)

a = 1.0000000001

Цифон (большие поплавки)

cdef longlong double a
a = 1.0000000001

Ним + Насасывать

var a = 1.0000000001
  • NIM необязательно может использовать явное float32 () , float64 () , float () Анкет

Логические

Питон

a = True

Кифон

cdef bint a
a = True

Ним + Насасывать

var a = true
  • Ним необязательно может использовать псевдоним на для Верно , OFF для Ложный Анкет

Функции

Питон

def foo(bar: str, baz: bool) -> int:
    return 1

Кифон

cdef int foo(char bar, bint baz)
def foo(bar: str, baz: bool) -> int:
    return 1

Ним + Насасывать

proc foo(bar: string, baz: bool): int =
    return 1
  • Ним необязательно может использовать Авто Для возврата типа это сделает вывод типа возврата.
  • Ним необязательно может использовать любой Для типа аргумента он выводит тип аргумента.
  • На NIM -аргументы функции неизбежен по умолчанию.
  • Ним необязательно может использовать Func вместо Proc для чисто функциональных функциональных программирования (без побочных эффектов).

Методы

Питон

def foo(self, bar: str, baz: bool) -> int:
    return 1

Кифон

cdef int foo(self, char bar, bint baz)
def foo(self, bar: str, baz: bool) -> int:
    return 1

Ним + Насасывать

proc foo(self: ObjectHere, bar: string, baz: bool): int =
    return 1
  • Objecthere добавлен для ясности.

Вставленные функции

  • Python не имеет встроенных функций.

Кифон

cdef inline int foo(char bar, bint baz)
def foo(bar: str, baz: bool) -> int:
    return 1
  • Цифон добавляет встроенный на cdef Чтобы внедрить функцию.

Ним + Насасывать

proc foo(bar: string, baz: bool): int {.inline.} =
    return 1
  • Ним добавляет {.в линию.} Прагма, чтобы внедрить функцию.

Лямбдас

Питон

from typing import Callable

variable: Callable[[int, int], int] = lambda var1, var2: var1 + var2

Ним + Насасывать

( proc (var1, var2: int): int = var1 + var2 )
  • Python Вы вынуждены поместить его на переменную для аннотаций типа, анонимные функции NIM сами по себе печатаются.
  • Лэмбдам Python не поддерживаются на цинтоне.
  • Синтаксис Python Lambda сильно отличается от функции.
  • Анонимные функции NIM – это просто функции без имени.
  • NIM анонимные функции необязательно могут быть Func для чисто функциональных функциональных программирования (без побочных эффектов).
  • Паренс добавлен для ясности.

Классы

Питон

class MyObject(object):
  """ Documentation Here, plain-text by default """
  pass

Ним + Насасывать

type MyObject = object  ## Documentation Here, **MarkDown** or *ReSTructuredText*

Комментарии и Docstrings

Питон

# This is a comment

""" This is a DocString, plain-text by default """

Кифон

# This is a comment

""" This is a DocString, plain-text by default """

Ним + Насасывать

# This is a comment

## This is a Documentation Comment, **MarkDown** or *ReSTructuredText*
  • Nim может само по себе генерировать документацию HTML, Latex, JSON, не требуется сторонний инструмент.
  • НИМПИ Размещает комментарии к документации о __doc__ как и ожидалось.

Json

Питон

import json

variable = json.loads("""{
  "key": "value",
  "other": true
}
""")

  • Цифон не имеет типов JSON.

Ним + Насасывать

import json

var variable = %*{
  "key": "value",
  "other": true
}
  • NIM использует буквальный JSON AS-I-IS непосредственно в коде, а не многострочную строку.

Подражание

  • У Python нет типов субстанции.
  • Цифон не имеет типов субстанции.

Ним + Насасывать

var subrange_integer: range[1..3] = 2
var subrange_float: range[1.0..3.0] = 2.5

var subrange_negative_integer: range[-3..-1] = -2
var subrange_negative_float: range[-3.0..-1.0] = -2.5
  • subrange_integer Только берет значения из 1 к 3 Анкет
  • subrange_float Только берет значения из 1.0 к 3.0 Анкет
  • subrange_negative_integer Только берет значения из -3 к -1 .
  • subrange_negative_float Только берет значения из -3.0 к -1.0 .

Статические постоянные

  • У Python нет статических констант (не компилируется).
  • Цифон не имеет статических постоянных (или рекомендуется не использовать их?).

Ним + Насасывать

const static_constant = 2 + 2
  • static_constant является неизменным, предварительно компиляционным предварительным значением.

Непомотники

  • Python не имеет неподвижных переменных времени выполнения.
  • Цифон не имеет неизменных переменных времени выполнения.

Ним + Насасывать

const foo = "Compile-Time Immutable Constant"
let bar = "Run-Time Immutable Variable"
var baz = "Run-Time Mutable Variable"

Выполнение функции компиляции

  • Python не имеет выполнения функции с компиляцией (не может компилировать).
  • Цифон не имеет выполнения функции компиляции.

Ним + Насасывать

let compile_time_sum = static(1 + 2)

static:
  assert 4 > 2, "Compile-Time Assert"
  const compile_time_config = static_read("config.ini")
  • Все, что вы положили внутри Статический: или static () будет запущен во время компиляции.

Разное

Файл Читать записи

Python/Cython

with open("file.txt", "r") as infile:
    content = infile.read()

with open("file.txt", "w") as outfile:
    outfile.write("some data")

Ним

var content = read_file("file.txt")
write_file("file.txt", "some data")
  • Cython, даже если его скомпилирован не может читать файлы во время компиляции, но nim static_read () могу.

Ним

const content = static_read("file.txt")
  • Nim static_read () это время компиляции read_file () Таким образом, версия Cython-время выполнения, а версия NIM-время компиляции.

Модуль самоопределение

Python/Cython

if __name__ in "__main__":

Ним

when is_main_module:
  • Nim Когда это время компиляции Если , так Версия Cython-время выполнения, а версия NIM-время компиляции.

Сообщения справки времени компиляции

  • У Cython нет способа печатать сообщения справки времени компиляции для пользователей.

Ним

{.hint:    "This is a Hint, printed at Compile-Time, with colors too" .}
{.warning: "Warning Pragma, is Compile-Time, produces no extra code" .}

👑

Оригинал: “https://dev.to/juancarlospaco/python-cython-nim-cheatsheet-hjj”