【Python基础】 17 Rust 与 Python 运算符对比学习笔记

一、算术运算符

运算符Rust 🦀Python 🐍示例 (Rust)示例 (Python)说明
+加法加法let sum = 5 + 3;sum = 5 + 3
-减法减法let diff = 5 - 3;diff = 5 - 3
*乘法乘法let product = 5 * 3;product = 5 * 3
/除法除法let quotient = 5 / 3;1quotient = 5 / 31.666...
%取余取模let remainder = 5 % 3;2remainder = 5 % 32
**幂运算result = 2 ** 38
//整除result = 5 // 22
关键差异:
  • 除法:Rust 整数除法会截断小数,Python 会返回浮点数
  • 幂运算:Rust 使用 pow() 方法,Python 使用 **
  • 整除:Python 有专门的 // 运算符
// Rust 算术运算
let a = 10;
let b = 3;println!("加法: {}", a + b);      // 13
println!("减法: {}", a - b);      // 7
println!("乘法: {}", a * b);      // 30
println!("除法: {}", a / b);      // 3 (整数除法)
println!("取余: {}", a % b);      // 1
println!("幂运算: {}", a.pow(b)); // 1000
# Python 算术运算
a = 10
b = 3print(f"加法: {a + b}")      # 13
print(f"减法: {a - b}")      # 7
print(f"乘法: {a * b}")      # 30
print(f"除法: {a / b}")      # 3.333... (浮点除法)
print(f"取余: {a % b}")      # 1
print(f"幂运算: {a ** b}")   # 1000
print(f"整除: {a // b}")     # 3

二、比较运算符

运算符Rust 🦀Python 🐍说明
==相等相等值相等
!=不等不等值不相等
>大于大于
<小于小于
>=大于等于大于等于
<=小于等于小于等于
关键差异:
  • 返回值:Rust 返回 bool,Python 返回 bool
  • 类型严格性:Rust 要求比较的操作数类型必须相同
// Rust 比较运算
let x = 5;
let y = 10;println!("相等: {}", x == y);    // false
println!("不等: {}", x != y);    // true
println!("大于: {}", x > y);     // false
println!("小于: {}", x < y);     // true// 类型必须匹配
// let result = 5 == 5.0; // 错误!不能比较 i32 和 f64
# Python 比较运算
x = 5
y = 10print(f"相等: {x == y}")    # False
print(f"不等: {x != y}")    # True
print(f"大于: {x > y}")     # False
print(f"小于: {x < y}")     # True# 类型可以不同(但通常不建议)
print(f"混合类型: {5 == 5.0}")  # True

三、逻辑运算符

运算符Rust 🦀Python 🐍说明
&&逻辑与and两者都为真
``逻辑或
!逻辑非not取反

关键差异:

  • 语法不同:Rust 使用符号,Python 使用关键字
  • 短路求值:两者都支持短路求值
// Rust 逻辑运算
let a = true;
let b = false;println!("与: {}", a && b);   // false
println!("或: {}", a || b);   // true
println!("非: {}", !a);       // false// 短路求值
let mut count = 0;
let result = false && {count += 1;true
};
println!("Count: {}", count); // 0 (短路,未执行)
# Python 逻辑运算
a = True
b = Falseprint(f"与: {a and b}")   # False
print(f"或: {a or b}")    # True
print(f"非: {not a}")     # False# 短路求值
count = 0
result = False and (count := count + 1)  # 使用海象运算符
print(f"Count: {count}")  # 0 (短路,未执行)

四、位运算符

运算符Rust 🦀Python 🐍说明
&按位与按位与
|按位或按位或
^按位异或按位异或
!按位取反~取反
<<左移左移
>>右移右移
关键差异:
  • 取反运算符:Rust 用 !,Python 用 ~
  • 移位行为:Rust 有算术移位和逻辑移位之分
// Rust 位运算
let a: u8 = 0b1010; // 10
let b: u8 = 0b1100; // 12println!("与: {:08b}", a & b);   // 00001000 (8)
println!("或: {:08b}", a | b);   // 00001110 (14)
println!("异或: {:08b}", a ^ b); // 00000110 (6)
println!("取反: {:08b}", !a);    // 11110101 (245)
println!("左移: {:08b}", a << 2); // 00101000 (40)
println!("右移: {:08b}", a >> 1); // 00000101 (5)
# Python 位运算
a = 0b1010  # 10
b = 0b1100  # 12print(f"与: {a & b:08b}")   # 00001000 (8)
print(f"或: {a | b:08b}")   # 00001110 (14)
print(f"异或: {a ^ b:08b}") # 00000110 (6)
print(f"取反: {~a & 0xFF:08b}") # 11110101 (245) - 需要掩码
print(f"左移: {a << 2:08b}") # 00101000 (40)
print(f"右移: {a >> 1:08b}") # 00000101 (5)

五、赋值运算符

运算符Rust 🦀Python 🐍说明
=赋值赋值基本赋值
+=加后赋值加后赋值
-=减后赋值减后赋值
*=乘后赋值乘后赋值
/=除后赋值除后赋值
%=取余后赋值取模后赋值
**=幂后赋值
//=整除后赋值

关键差异:

  • Python 有更多复合赋值运算符
  • Rust 需要变量声明为 mut 才能修改
// Rust 赋值运算
let mut x = 10;
x += 5;    // x = 15
x -= 3;    // x = 12
x *= 2;    // x = 24
x /= 4;    // x = 6
x %= 4;    // x = 2// 需要 mut 关键字
// let y = 10;
// y += 5; // 错误!y 不可变
# Python 赋值运算
x = 10
x += 5    # x = 15
x -= 3    # x = 12
x *= 2    # x = 24
x /= 4    # x = 6.0
x %= 4    # x = 2.0
x **= 3   # x = 8.0
x //= 2   # x = 4.0# 不需要特殊声明
y = 10
y += 5    # 可以直接修改

六、类型相关运算符

Rust 特有运算符
// 类型转换 as
let x: i32 = 10;
let y: f64 = x as f64; // 显式类型转换// 引用和解引用
let value = 42;
let ref_value = &value;    // 创建引用
let deref_value = *ref_value; // 解引用// 范围运算符 ..
for i in 0..5 {           // 0, 1, 2, 3, 4println!("{}", i);
}for i in 0..=5 {          // 0, 1, 2, 3, 4, 5println!("{}", i);
}

Python 特有运算符

# 身份运算符 is, is not
a = [1, 2, 3]
b = [1, 2, 3]
c = aprint(a is b)     # False - 不同对象
print(a is c)     # True - 同一对象
print(a == b)     # True - 值相等# 成员运算符 in, not in
numbers = [1, 2, 3, 4, 5]
print(3 in numbers)       # True
print(6 not in numbers)   # True# 海象运算符 := (Python 3.8+)
if (n := len(numbers)) > 3:print(f"列表有 {n} 个元素")

八、运算符重载

Rust 运算符重载
use std::ops::Add;#[derive(Debug)]
struct Point {x: i32,y: i32,
}impl Add for Point {type Output = Point;fn add(self, other: Point) -> Point {Point {x: self.x + other.x,y: self.y + other.y,}}
}let p1 = Point { x: 1, y: 2 };
let p2 = Point { x: 3, y: 4 };
let p3 = p1 + p2;
println!("{:?}", p3); // Point { x: 4, y: 6 }
Python 运算符重载
class Point:def __init__(self, x, y):self.x = xself.y = ydef __add__(self, other):return Point(self.x + other.x, self.y + other.y)def __repr__(self):return f"Point({self.x}, {self.y})"p1 = Point(1, 2)
p2 = Point(3, 4)
p3 = p1 + p2
print(p3)  # Point(4, 6)

九、优先级对比

Rust 运算符优先级(从高到低)
  1. () [] . ? !
  2. - ! * & &mut (一元)
  3. as
  4. * / %
  5. + -
  6. << >>
  7. &
  8. ^
  9. |
  10. == != < > <= >=
  11. &&
  12. ||
  13. .. ..=
  14. = += -= *= /= %= &= |= ^= <<= >>=
Python 运算符优先级(从高到低)
  1. () [] . {}
  2. ** (指数)
  3. +x -x ~x (一元)
  4. * / // %
  5. + -
  6. << >>
  7. &
  8. ^
  9. |
  10. == != < > <= >= is is not in not in
  11. not
  12. and
  13. or
  14. := (海象运算符)

九、总结对比

特性Rust 🦀Python 🐍
类型安全⭐⭐⭐⭐⭐ (编译时检查)⭐⭐⭐ (运行时检查)
运算符数量⭐⭐⭐⭐⭐⭐⭐⭐⭐
语法一致性⭐⭐⭐⭐⭐⭐⭐⭐⭐
学习曲线⭐⭐ (较陡峭)⭐⭐⭐⭐⭐ (平缓)
表达能力⭐⭐⭐⭐⭐⭐⭐⭐⭐
性能⭐⭐⭐⭐⭐⭐⭐⭐
选择建议:
  • 选择 Rust:需要高性能、内存安全、系统级编程
  • 选择 Python:需要快速开发、脚本编写、数据科学

关键记忆点:

  • Rust 使用符号逻辑运算符 (&&, ||, !)
  • Python 使用关键字逻辑运算符 (and, or, not)
  • Rust 整数除法会截断,Python 会返回浮点数
  • Rust 需要显式类型转换,Python 支持隐式转换
  • Python 有更多专用运算符 (**, //, in, is)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95855.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单链表逆序java

在Java中实现单链表的逆序&#xff0c;可以通过迭代或递归两种方式。以下是两种方法的详细实现&#xff1a; 1. 迭代方法&#xff08;推荐&#xff09; public class ListNode {int val;ListNode next;ListNode(int x) { val x; } }class Solution {public ListNode reverseLi…

(11)用于无GPS导航的制图师SLAM(二)

文章目录 前言 7 构建软件包 8 开始制图 9 配置 ArduPilot 10 测试 11 视频 前言 本页展示了如何使用 RPLidarA2 激光雷达(RPLidarA2 lidar)设置 ROS 和 Google Cartographer SLAM&#xff0c;为 ArduPilot 提供本地位置估计&#xff0c;使其可以在没有 GPS 的情况下运行…

1.5、机器学习-回归算法

1、线性回归模型 线性回归模型(Liner Regression)&#xff0c;是利用线性拟合的方式来探寻数据背后的规律。通过搭建线性回归模型&#xff0c;可以寻找这些散点&#xff08;也称样本点&#xff09;背后的趋势线(也称回归曲线)。 借助回归曲线&#xff0c;我们可以进行一些简单…

eclipse 安装 lombok

好久没有用eclipse&#xff0c;新装eclipse 发现lombok 没有生效&#xff0c;如下安装最省事&#xff0c;无需安装plugin等。 进入maven 本地目录&#xff0c;如&#xff1a;org\projectlombok\lombok\1.18.38&#xff0c;点击lombok jar文件指定eclipse 目录&#xff0c;安装完…

linux离线安装elasticsearch8.19.3

下载: 官网多版本下载: Past Releases of Elastic Stack Software | Elastic github多版本下载: https://github.com/elastic/elasticsearch/releases 上传后解压到当前目录 tar -zxvf elasticsearch-8.19.3-linux-x86_64.tar.gz 或指定解压目录 tar -xzf elasticsearch-8…

Uniapp中进行微信小程序头像和昵称的更改

一、官方文档&#xff1a; 1、wx.getUserInfo&#xff08;uni.getUserInfo&#xff09;&#xff1a;基础库版本低于2.27.1可用 ① 文档链接&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.htmlhttps://uniapp.dclou…

交换机详细

交换机&#xff08;Sritch&#xff09;&#xff1a;一种用于电&#xff08;光&#xff09;信号转发的网络设备&#xff0c;可以为接入交换机的任意两个网络节点提供独享的电信号通路。解决什么问题&#xff1f;多台设备之间的数据交换的问题。因此根据它的功能&#xff0c;它通…

功能强大的多线程端口扫描工具,支持批量 IP 扫描、多种端口格式输入、扫描结果美化导出,适用于网络安全检测与端口监控场景

工具介绍 PortScanner - 多线程端口扫描工具&#xff0c;一款功能强大的多线程端口扫描工具&#xff0c;支持批量 IP 扫描、多种端口格式输入、扫描结果美化导出&#xff0c;适用于网络安全检测与端口监控场景。&#x1f31f; 功能特性 &#x1f50d; 灵活的扫描目标&#xff1…

【OpenHarmony文件管理子系统】文件访问接口mod_fileio解析

OpenHarmony文件访问接口mod_fileio解析 概述 mod_fileio模块是OpenHarmony文件管理API中的核心模块之一&#xff0c;提供了完整的文件I/O操作功能。该模块基于Node.js N-API构建&#xff0c;为JavaScript应用提供了丰富的文件系统操作接口&#xff0c;包括文件读写、目录操作、…

js逆向Webpack模块加载机制解析:从数组到JSONP

1. 概述 Webpack作为现代前端开发中最流行的模块打包工具&#xff0c;其模块加载机制值得深入理解。本文将解析Webpack的几种模块加载方式&#xff0c;包括数组形式、键值对形式和JSONP动态加载。只有理解了它的相关加载机制&#xff0c;我们才可以进行逆向工作。 2. 数组形式的…

Joplin-解决 Node.js 中 “digital envelope routines::unsupported“ 错误

解决 Node.js 中 “digital envelope routines::unsupported” 错误 在使用 Webpack 构建 Joplin 插件时&#xff0c;你可能会遇到 error:0308010C:digital envelope routines::unsupported 错误。这个错误看起来很复杂&#xff0c;但实际上有明确的原因和解决方案。 错误原因…

UE5 UAT

通过UAT 打包的流程&#xff0c;先整理这么点入口// Engine\Source\Programs\AutomationTool\Program.cs /// <summary> /// Main entry point /// </summary> public partial class Program {public static async Task<int> Main(string[] Arguments){Logge…

Python带状态生成器完全指南:从基础到高并发系统设计

引言&#xff1a;状态化生成器的核心价值在复杂系统开发中&#xff0c;带状态的生成器是处理复杂逻辑的核心工具。根据2024年Python开发者调查报告&#xff1a;78%的状态机实现使用带状态生成器85%的数据管道依赖状态化生成器92%的并发系统需要状态管理65%的算法优化通过状态化…

Python元组:不可变但灵活的数据容器

Python元组&#xff1a;不可变但灵活的数据容器 元组(tuple)是Python中一种不可变(immutable)但功能灵活的有序集合数据类型&#xff0c;具有以下核心特性&#xff1a;一、基本特性 不可变性‌&#xff1a;创建后不能修改元素&#xff08;增删改操作均不允许&#xff09; 有序存…

FastGPT源码解析 Agent 大模型对接接口和使用详解

FastGPT 大模型对接核心代码分析 核心架构概览 FastGPT 采用统一模型抽象层设计&#xff0c;通过标准化接口对接多种大模型&#xff0c;支持 LLM、Embedding、ReRank、TTS、STT 等多种 AI 能力。 支持各种大模型能力的配置&#xff0c;包括本地ollama、各个AI云厂商的API接入配…

AI Compass前沿速览:Kimi K2、InfinityHuman-AI数字人、3D-AI桌面伴侣、叠叠社–AI虚拟陪伴

AI Compass前沿速览&#xff1a;Kimi K2、InfinityHuman-AI数字人、3D-AI桌面伴侣、叠叠社–AI虚拟陪伴 AI-Compass 致力于构建最全面、最实用、最前沿的AI技术学习和实践生态&#xff0c;通过六大核心模块的系统化组织&#xff0c;为不同层次的学习者和开发者提供从完整学习路…

如何下载B站视频,去水印,翻译字幕

首先先来看下如何下载B站视频及音频工具&#xff1a;手机下载视频打开文件管理器&#xff0c;找到video.m4s和audio.m4s两个文件更改文件后缀名第一步到此为止然后我们再来看一下如何去水印&#xff0c;去字幕工具&#xff1a;剪映导入视频选择蒙版 > 镜面点击反转点击基础&…

用 Cursor AI 快速开发你的第一个编程小程序

Cursor AI 作为新一代 AI 编程助手&#xff0c;集成了代码补全、智能调试、自动生成等强大功能&#xff0c;非常适合用来开发小型应用或小程序。本文我将手把手带你用 Cursor AI 开发一个简单的天气查询小程序&#xff0c;并在文中推荐一门实用的商业变现课程&#xff0c;助你走…

MacOS 使用 luarocks+wrk+luajit

MacOS 使用 luarockswrkluajit luarocks 默认使用的是 lua 5.4 版本&#xff0c;一些工具&#xff0c;例如 wrk 使用的 lua 5.1&#xff0c;那么 luarocks 在安装依赖的时候就需要指定 lua 5.1。 luarocks config 配置 lua 5.1 请确保已经安装了 lua5.1 或者 luajit&#xff0c…

PostgreSQL18-FDW连接的 SCRAM 直通身份验证

PostgreSQL18-FDW连接的 SCRAM 直通身份验证 PostgreSQL 18 为使用 postgres_fdw 或 dblink_fdw 的人带来了很好的改进&#xff1a;SCRAM 直通身份验证。设置外部服务器连接时&#xff0c;您不再需要在“用户映射”选项中存储纯文本密码。 这是实现它的提交&#xff1a; commit…