【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
英文地址,請注明出處:http://en.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…