Correspondance entre les fonctions intégrées de Python et Rust

J'ai confirmé l'opération avec Rust 1.0

Veuillez noter qu'un bon nombre d'API restent instables même dans la version 1.0.

abs

fn abs() {
    println!("abs(-1.5f32)={}", -1.5f32.abs());
    println!("abs(-2i32)={}", -2i32.abs());
}

all

fn all() {
    //la plage est de type int
    (0..10).all(|x| x % 2 == 0);
    //Itérateur normal&type int
    [2, 4].iter().all(|&x| x % 2 == 0);
    //Il est désagréable que les types renvoyés par range et iterator soient différents, donc renvoyez toujours une référence.
    //je te veux
}

any

fn any() {
    (0..10).any(|x| x == 9);
    [0, 1].iter().all(|x| *x == 1);
}

ascii Malheureusement, le moyen facile est instable

fn ascii() {
    // unstable feature
    // println!("unicode escape is [{}]", "Aiueo abcde".escape_unicode());
    // println!("default escape is [{}]", "Aiueo abcde\n\t\r".escape_default());
}

bin

fn bin() {
    //Les littéraux binaires peuvent être définis comme 0b0011
    let a = 0b1010; // == 10
    let b = format!("0b{:b}", 10);
    println!("{}", b);
}

bytearray, bytes

fn bytearray() {
    // 1
    let x: Vec<char> = vec!['\x20', 'a'];
    // 2
    let mut y = Vec::new();
    write!(&mut y, "abcde");
    // 3
    let z = "Ah".bytes().collect::<Vec<u8>>();
}

chr

fn chr() {
    println!("{:?}", std::char::from_u32(0x61));
}

dict

fn dict() {
   let mut a = std::collections::HashMap::<&str, &str>::new();
   a.insert("a", "A");
}

divmod

fn divmod() {
    let a = 5;
    let (b, c) = (a / 2, a % 2);
    println!("divmod: {}, {}", b, c);
}

enumerate

fn enumerate() {
    // enumerate(start=1)Il n'y a pas d'option comme
    for (idx, x) in (1..3).enumerate() {
        println!("enumerate: {}, {}", idx, x);
    }
}

filter

fn filter() {
    let x = [1, 2, 3, 4, 5];
    println!("filter: {:?}", x.iter().filter_map(|&x| if x % 2 == 0 {Some(x)} else {None}).collect::<Vec<i32>>());
    //Objet de filtre
    let y = x.iter().filter(|&x| *x % 2 == 0);
}

float

fn float() {
    // from string
   let x = "-1.5e-1".parse::<f32>();
   // from integer
   let y = 100i32 as f32;
   let z = "inf".parse::<f32>();
   println!("float: {:?}, {:?}, {:?}", x, y, z);
}

format

fn format() {
    let x = format!("{}, {}", "hello", "world!");
    println!("{}", x);
}

frozenset, set

fn frozenset() {
    let mut x = std::collections::HashSet::<i32>::new();
    x.insert(0);
    x.insert(1);
    let y = x.clone();  // immutable
    let z: std::collections::HashSet<i32> = [1, 2, 3].iter().map(|&x| x).collect();
}

hash Toujours instable

fn hash() {
    // unstable feature
    // println!("hash: {}", std::hash::hash::<_, std::hash::SipHasher>(&0));
}

hex

fn hex() {
    let x = format!("0x{:x}, {}", 0x20, 0x20);
    println!("hex: {}", x);
}

id La seule façon de savoir s'il s'agit du même objet est de rechercher l'adresse?

fn id() {
    let x = 1;
    let y = format!("{:p}", &x);  //Obtenir l'adresse sous forme de chaîne
    println!("id: x={}", y);
    let z = x;
    println!("id: x is z?: {}", (&z as *const _) == (&x as *const _));
}

input

fn input() {
    print!("Please input any:");
    let mut x = String::new();
    std::io::stdin().read_line(&mut x).ok().expect("Failed");
    println!("input: {}", x);
}

int

fn int() {
    let x: i32 = "123".parse().ok().except("not int");
    assert_eq!(x, 123);
    let y = 123.456f32 as i32;
    assert_eq!(x, y);
}

iter

fn iter() {
    let x = [1, 2];
    let y = x.iter();
}

len

fn len() {
    let x = [1, 2];
    println!("len: {}", x.len());
}

list

fn list() {
    // Fixed size
    let x = [1, 2];
    // Variable size
    let mut y = vec![1, 2];
    y.push(3);
}

map

fn map() {
    let x = [1, 2];
    let y = x.iter().map(|&x| x * 2);
    println!("map: {:?}", y.collect::<Vec<i32>>());
}

max min_max est toujours instable

fn max() {
    let x = [1, 3, 2];
    let y = x.iter().max();
    println!("max: {:?}", y);
    println!("max: min_max: {:?}", x.iter().min_max());
    println!("max: number: {}", std::cmp::max(5, 3));
}

min min_max est toujours instable

fn min() {
    let x = [1, 3, 2];
    let y = x.iter().min();
    println!("min: {:?}", y);
    // println!("min: min_max: {:?}", x.iter().min_max());
    println!("min: number: {}", std::cmp::min(5, 3));
}

next

fn next() {
    let x = [1, 2, 3];
    let mut y = x.iter();
    println!("next: {:?}", y.next());  //Iterator lui-même doit être modifiable
    println!("next: {:?}", y.next());
}

oct

fn oct() {
    let x = format!("{:o}", 10);
    println!("oct: {}", x);
}

open

fn open() {
    let x = std::fs::File::open("hoge.txt");
}

ord

fn ord() {
    //Obtenu par casting
    let x = 'Ah' as u32;
    println!("ord: 0x{:x}, {}", x, x);
}

pow

fn pow() {
    use std::num::{Int, Float};
    println!("pow: {}", 2.pow(3));
    println!("powf: {}, powi: {}", 2.0f32.powf(3.0f32), 2.0f32.powi(-1));
}

print

fn print() {
    print!("print!");
    println!("println!");
}

range Utilisez la notation par plage. La plage dispersée par step_by est toujours instable

fn _range() {
    println!("range: {:?}", (0..2).collect::<Vec<i32>>());
    // unstable
    // println!("range_step: {:?}", (0..4).step_by(2).collect::<Vec<i32>>());
    // println!("range_step(negative): {:?}", (4..0).step_by(-2).collect::<Vec<i32>>());

reverse

fn reverse() {
    let x = [1, 2];
    for i in x.iter().rev() {println!("reverse: {}", i);}  // reverse iterator
    let mut y = x.clone();
    y.reverse();  //Directement dans l'ordre inverse
}

round

fn round() {
    //Le comportement est différent de Python round
    use std::num::Float;
    println!("round 0.5 = {}", 0.5f32.round());
    println!("round -0.5 = {}", -0.5f32.round());
    println!("round 1.5 = {}", 1.5f32.round());
    println!("round -1.5 = {}", -1.5f32.round());
}

slice Devrait être unifié en notation de tranche? Les sections fermées ne peuvent plus être créées. Que se passera-t-il dans le futur?

fn slice() {
    let x = [1, 2, 3, 4, 5];
    println!("slice of {:?}: {:?}", x, &x[1..3]);
    println!("slice_from of {:?}: {:?}", x, &x[1..]);
    println!("slice_to of {:?}: {:?}", x, &x[..3]);
    println!("full_slice of {:?}: {:?}", x, &x[..]);
}

sorted

fn sorted() {
    // in-place seulement
    let x = [1, 4, 2, 3];
    let mut y = x.clone();
    y.sort();
    println!("sort: {:?}", y);
}

sum Zubari sum () est toujours instable, donc fold sera utilisé à la place.

fn sum() {
    let x = (1..11).fold(0, |n, x| n + x);
    println!("sum from 1 to 10 = {}", x);
    // unstable
    // println!("sum: {}", (1..11).sum::<i32>());
}

super Le super mot-clé de Rust est utilisé pour désigner le module parent

use super::child_module;

tuple

fn tuple() {
    let x = (1, "string");
}

type

Est-ce dans std :: intrinsics? Eh bien, je ne sais pas

zip

fn zip() {
    let x = [1, 2];
    let y = ["one", "two"];
    //Il semble impossible de rassembler facilement trois éléments ou plus. Flattez-vous_Vous pouvez le faire en écrivant une fonction à l'aide de map
    let z: Vec<(&i32, &&str)> = x.iter().zip(y.iter()).collect();
    println!("{:?}", z);
}


Recommended Posts

Correspondance entre les fonctions intégrées de Python et Rust
Fonction intégrée Python ~ Zip ~
Fonctions intégrées Wrap Python
Fonctions de tri et de comparaison Python 3
Fonctions d'ordre supérieur et notation d'inclusion en Python
Différence entre Ruby et Python Split
Différence entre java et python (mémo)
Différence entre list () et [] en Python
Différence entre == et est en python
Correspondance entre RecyclerView et Marker (Kotlin)
Coopération entre le module python et l'API
Différence entre la série python2 et la série python3 dict.keys ()
[Python] Différence entre fonction et méthode
Python - Différence entre exec et eval
[Python] Différence entre randrange () et randint ()
[Python] Différence entre trié et trié (Colaboratoire)
Python intégré
Fonctions Python
Communiquez entre Elixir et Python avec gRPC
Différence d'authenticité entre Python et JavaScript
Différences entre Ruby et Python dans la portée
Conquérir 69 fonctions intégrées de Python 6th p ~ r
différence entre les instructions (instructions) et les expressions (expressions) en Python
Différences entre la syntaxe Python et Java
Différences dans la relation entre PHP et Python enfin et quitter
Différence entre @classmethod et @staticmethod en Python
[Python] Différence entre la méthode de classe et la méthode statique
[Python3] Basculer entre Shift_JIS, UTF-8 et ASCII
[Python Iroha] Différence entre List et Tuple
[python] Différence entre la sortie rand et randn
Différences de multithreading entre Python et Jython
Différence entre Ruby et Python (syntaxe de base)
Utiliser Python et MeCab avec Azure Functions
Communication de données chiffrées entre Python et C #
[Python] Cas où le temps d'exécution diffère entre la liste intégrée et deque
Résumé de la correspondance entre les opérations de tableau ruby et python
Objet intégré Python
Résumé des différences entre PHP et Python
Liste des fonctions et méthodes intégrées fréquemment utilisées
La réponse de "1/2" est différente entre python2 et 3
[python] Différence entre variable et self. Variable dans la classe
[Python] Mémo de conversion entre les données temporelles et les données numériques
À propos de la différence entre "==" et "is" en python
Objet intégré Python
Jeu manuel Python (interopérabilité entre CSV et PostgreSQL)
# Bases de Python (fonctions)
[Débutant] Fonctions Python
Une histoire sur la modification de Python et l'ajout de fonctions
Fonctions Python faciles à utiliser
bases de python: fonctions
fonctions cv2 et types de données (liaison python OpenCV)
Fonctions intégrées de Python
Expérience de comparaison de la vitesse d'écriture de fichier entre python 2.7.9 et pypy 2.5.0
[Ruby vs Python] Comparaison de référence entre Rails et Flask
Contrôler d'autres programmes depuis Python (communication entre Python ⇔ exe)
Différence entre Ruby et Python en termes de variables