Utiliser une plage de type Python avec Rust

introduction

Je vais vous montrer comment utiliser une plage de type Python avec Rust.

Il peut être utilisé comme suit.

// for i in range(5):
//     print(i)
for i in range!(5) {
    println!("{}", i);
}

// for i in range(1, 5):
//     print(i)
for i in range!(1, 5) {
    println!("{}", i);
}

// for i in range(1, 5, 2):
//     print(i)
for i in range!(1, 5, 2) {
    println!("{}", i);
}

// for i in range(5, 1, -1):
//     print(i)
for i in range!(5, 1, -1) {
    println!("{}", i);
}

manière

Vous pouvez implémenter une plage de type Python avec les macros suivantes.

macro_rules! range {
    ($stop:expr) => {
        0..$stop
    };
    ($start:expr, $stop:expr) => {
        $start..$stop
    };
    ($start:expr, $stop:expr, -$step:expr) => {
        ($stop + 1..$start + 1).rev().step_by($step)
    };
    ($start:expr, $stop:expr, $step:expr) => {
        ($start..$stop).step_by($step)
    };
}

Il renvoie essentiellement le même itérateur que la fonction de plage Python.

Choses impossibles

Lorsque vous spécifiez une étape négative, step_by () ne peut recevoir que ʻusize, vous devez donc inverser l'itérateur avec rev () `. Par conséquent, la présence ou l'absence de "-" est jugée par correspondance de modèle, et il est décidé d'effectuer ou non "rev ()". Par conséquent, si une variable contient un nombre négatif et est donnée comme une étape, elle ne peut pas être déterminée comme un nombre négatif par correspondance de modèle, ce qui entraîne une erreur de compilation.

//Erreur de compilation
let x = -1;
for i in range!(5, 1, x) {
    println!("{}", i);
}

Je voudrais savoir s'il existe un moyen de bien mettre en œuvre cela.

finalement

Les macros Rust ont beaucoup de liberté, donc c'est très amusant.

Recommended Posts

Utiliser une plage de type Python avec Rust
Utilisez RTX 3090 avec PyTorch
Utiliser ansible avec cygwin
Utiliser pipdeptree avec virtualenv
[Python] Utiliser JSON avec Python
Utilisez Mock avec pytest
Utiliser Gentelella avec Django
Utiliser tensorboard avec Chainer
Utiliser DynamoDB avec Python
Utiliser pip avec MSYS2
Utilisez Python 3.8 avec Anaconda
Utiliser les droits d'auteur avec Spacemacs
Utiliser python avec docker
Utilisez LESS avec Django
Utiliser Enum avec SQLAlchemy
Utiliser tensorboard avec NNabla
Utiliser le GPS avec Edison
Étendre NumPy avec Rust
Utiliser l'API Trello avec python
Utiliser la mémoire partagée avec une bibliothèque partagée
Utiliser des graphiques directionnels avec networkx
Utiliser TensorFlow avec Intellij IDEA
Utiliser l'API Twitter avec Python
Utiliser pip avec Jupyter Notebook
Utiliser DATE_FORMAT avec le filtre SQLAlchemy
Utiliser TUN / TAP avec Python
Utilisez sqlite3 avec NAO (Pepper)
Utilisez les load_extensions de sqlite avec Pyramid
Utiliser les polices Windows 10 avec WSL
Utilisation du chainer avec Jetson TK1
Utiliser SSL avec Celery + Redis
Utilisez Maxout + CNN avec Pylearn2
Utilisez WDC-433SU2M2 avec Manjaro Linux
Utilisez OpenBLAS avec numpy, scipy
Utiliser l'API subsonique avec python3
Utilisation de Sonicwall NetExtener avec Systemd
Utilisez prefetch_related commodément avec Django
Utiliser l'interpréteur AWS avec Pycharm
Utilisation de Bokeh avec IPython Notebook
Utiliser MLflow avec Databricks ④ --Call model -
Utilisez Rust pour déplacer Pocket Miku.
Python: comment utiliser async avec
Utiliser la caméra Point Grey avec Python (PyCapture2)
Utilisez vl53l0x avec RaspberryPi (python)
Utilisez PX-S1UD / PX-Q1UD avec Jetson nano
Utilisez la fonction de prévisualisation avec aws-cli
Pour utiliser virtualenv avec PowerShell
Utilisez NAIF SPICE TOOL KIT avec Python
Utiliser rospy avec virtualenv dans Python3
Utiliser Markdown avec le notebook Jupyter (avec raccourci)
Utiliser Python mis en pyenv avec NeoVim
Utilisez Tensorflow 2.1.0 avec Anaconda sur Windows 10!
Utiliser la synthèse vocale Windows 10 avec Python
Utiliser la bibliothèque curl / jq avec Go
Je ne peux pas utiliser le japonais avec pyperclip
Utiliser le fichier d'étalonnage de la caméra avec OpenCvSharp4
Utilisez la fonction MULTI_ORG avec re: dash
Utiliser OpenCV avec Python 3 dans Window