【Python基礎】 19 Rust 與 Python if 語句對比筆記

一、基本語法對比

Rust if 語句
// 基本形式
let number = 7;if number < 5 {println!("condition was true");
} else {println!("condition was false");
}// 多條件 else if
if number % 4 == 0 {println!("number is divisible by 4");
} else if number % 3 == 0 {println!("number is divisible by 3");
} else if number % 2 == 0 {println!("number is divisible by 2");
} else {println!("number is not divisible by 4, 3, or 2");
}
Python if 語句
# 基本形式
number = 7if number < 5:print("condition was true")
else:print("condition was false")# 多條件 elif
if number % 4 == 0:print("number is divisible by 4")
elif number % 3 == 0:print("number is divisible by 3")
elif number % 2 == 0:print("number is divisible by 2")
else:print("number is not divisible by 4, 3, or 2")

二、條件表達式差異

布爾值處理
// Rust - 必須顯式布爾值
let x = 5;// 編譯錯誤:if 條件必須是 bool 類型
// if x {
//     println!("x is truthy");
// }if x != 0 {println!("x is not zero");  // 正確
}if true {  // 必須使用布爾值println!("This will always execute");
}
# Python - 支持真值測試
x = 5# Python 會進行真值測試
if x:  # x 非零,為真print("x is truthy")  # 會執行# 各種真值情況
if 0:           # Falsepass
if "":          # Falsepass  
if []:          # Falsepass
if None:        # Falsepass
if "hello":     # Truepass
if [1, 2, 3]:   # Truepass
比較運算符
// Rust 比較運算符
let a = 5;
let b = 10;if a == b {  // 相等println!("equal");
}
if a != b {  // 不等println!("not equal");
}
if a < b {   // 小于println!("less");
}
if a > b {   // 大于println!("greater");
}
if a <= b {  // 小于等于println!("less or equal");
}
if a >= b {  // 大于等于println!("greater or equal");
}
# Python 比較運算符
a = 5
b = 10if a == b:    # 相等print("equal")
if a != b:    # 不等print("not equal") 
if a < b:     # 小于print("less")
if a > b:     # 大于print("greater")
if a <= b:    # 小于等于print("less or equal")
if a >= b:    # 大于等于print("greater or equal")# Python 還支持鏈式比較
if 1 <= a <= 10:  # 1 ≤ a ≤ 10print("a is between 1 and 10")

三、邏輯運算符對比

Rust 邏輯運算符
let age = 25;
let has_license = true;// && - 邏輯與
if age >= 18 && has_license {println!("Can drive");
}// || - 邏輯或  
if age < 18 || !has_license {println!("Cannot drive");
}// ! - 邏輯非
if !has_license {println!("No license");
}// 短路求值
let mut count = 0;
if false && { count += 1; true } {// 不會執行,因為短路
}
println!("Count: {}", count); // 0
Python 邏輯運算符
age = 25
has_license = True# and - 邏輯與
if age >= 18 and has_license:print("Can drive")# or - 邏輯或
if age < 18 or not has_license:print("Cannot drive")# not - 邏輯非
if not has_license:print("No license")# 短路求值
count = 0
if False and (count := count + 1):  # 使用海象運算符pass
print(f"Count: {count}")  # 0

四、模式匹配(Rust 特有)

match 表達式
let number = 13;match number {1 => println!("One"),2 | 3 | 5 | 7 | 11 => println!("Prime"),13..=19 => println!("Teen"),_ => println!("Other"),
}// 匹配并提取值
let some_value = Some(5);
match some_value {Some(x) if x > 0 => println!("Positive: {}", x),Some(0) => println!("Zero"),Some(_) => println!("Negative"),None => println!("No value"),
}
if let 語法
let some_number = Some(7);// 傳統 match
match some_number {Some(i) => println!("Matched {}", i),_ => {}, // 必須處理所有情況
}// 使用 if let 簡化
if let Some(i) = some_number {println!("Matched {}", i);
}// 帶條件的 if let
if let Some(i) = some_number && i > 5 {println!("Number is greater than 5: {}", i);
}

五、條件賦值對比

Rust 條件表達式
// if 是表達式,可以返回值
let condition = true;
let number = if condition {5
} else {6
};println!("The value of number is: {}", number);// 必須返回相同類型
// let result = if condition {
//     5       // i32
// } else {
//     "six"   // &str - 編譯錯誤!
// };// 復雜條件賦值
let x = 10;
let category = if x < 0 {"negative"
} else if x == 0 {"zero" 
} else {"positive"
};println!("Category: {}", category);
Python 條件表達式
# 三元運算符
condition = True
number = 5 if condition else 6
print(f"The value of number is: {number}")# 可以返回不同類型
result = 5 if condition else "six"
print(f"Result: {result}")# 傳統多行寫法
x = 10
if x < 0:category = "negative"
elif x == 0:category = "zero"
else:category = "positive"print(f"Category: {category}")

六、作用域和變量遮蔽

Rust 作用域
let number = 5;if number > 0 {let message = "Positive";  // 塊內變量println!("{}", message);
} // message 離開作用域// println!("{}", message); // 錯誤:message 未定義// 變量遮蔽
let x = 5;
if x > 0 {let x = x * 2;  // 遮蔽外部 xprintln!("Inside: {}", x);  // 10
}
println!("Outside: {}", x);  // 5
Python 作用域
number = 5if number > 0:message = "Positive"  # 在 if 塊內定義print(message)print(message)  # 仍然可以訪問!Python 沒有塊級作用域# 避免意外修改
x = 5
if x > 0:x = x * 2  # 修改外部變量print(f"Inside: {x}")  # 10print(f"Outside: {x}")  # 10 - 已被修改

七、高級模式匹配

Rust 復雜模式匹配
// 匹配元組
let pair = (0, -2);
match pair {(0, y) => println!("First is 0, y = {}", y),(x, 0) => println!("x = {}, second is 0", x),_ => println!("No zeros"),
}// 匹配枚舉
enum Message {Quit,Move { x: i32, y: i32 },Write(String),ChangeColor(i32, i32, i32),
}let msg = Message::ChangeColor(0, 160, 255);
match msg {Message::Quit => println!("Quit"),Message::Move { x, y } => println!("Move to ({}, {})", x, y),Message::Write(text) => println!("Text message: {}", text),Message::ChangeColor(r, g, b) => {println!("Change color to RGB({}, {}, {})", r, g, b)},
}// @ 綁定
let value = Some(10);
match value {Some(x @ 1..=5) => println!("Small number: {}", x),Some(x @ 6..=10) => println!("Medium number: {}", x),Some(x) => println!("Large number: {}", x),None => println!("No number"),
}

八、錯誤處理模式

Rust 錯誤處理
// 使用 Result 和 match
let result: Result<i32, &str> = Ok(42);match result {Ok(value) => println!("Success: {}", value),Err(error) => println!("Error: {}", error),
}// 使用 if let 處理 Option
let optional_value: Option<i32> = Some(5);if let Some(value) = optional_value {println!("Got value: {}", value);
} else {println!("No value");
}
Python 錯誤處理
# 使用 try-except
try:result = 10 / 0print(f"Success: {result}")
except ZeroDivisionError as e:print(f"Error: {e}")# 使用 if 檢查 None
optional_value = 5  # 或者 Noneif optional_value is not None:print(f"Got value: {optional_value}")
else:print("No value")

九、性能考慮

Rust 性能特性
// 編譯時優化 - match 會被優化為跳轉表
let x = 3;
match x {1 => println!("One"),2 => println!("Two"), 3 => println!("Three"),_ => println!("Other"),
}// 無運行時開銷的模式匹配
let opt: Option<i32> = Some(42);
if let Some(x) = opt {  // 編譯時檢查println!("{}", x);
}
Python 性能考慮
# 避免深層嵌套的 if-elif
value = 42# 不好:深層嵌套
if value == 1:pass
elif value == 2:pass
elif value == 3:pass
# ... 很多個 elif# 更好:使用字典分發
def handle_1():passdef handle_2():passhandlers = {1: handle_1,2: handle_2,# ...
}if value in handlers:handlers[value]()

十、總結對比

特性Rust 🦀Python 🐍
語法if condition { }if condition:
布爾要求必須顯式 bool支持真值測試
作用域塊級作用域函數級作用域
返回值表達式,可返回值語句,無返回值
模式匹配強大的 match無內置模式匹配
類型安全編譯時檢查運行時檢查
性能零成本抽象有運行時開銷
靈活性相對嚴格非常靈活
選擇建議:
  • 選擇 Rust:需要類型安全、高性能、模式匹配
  • 選擇 Python:需要快速開發、靈活的條件判斷

關鍵記憶點:

  • Rust 的 if 是表達式,Python 的 if 是語句
  • Rust 需要顯式布爾值,Python 支持真值測試
  • Rust 有強大的模式匹配,Python 依賴 if-elif 鏈
  • Rust 有塊級作用域,Python 是函數級作用域
  • Rust 的 match 編譯時優化,Python 的 if 運行時評估

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921686.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921686.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921686.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue項目_項目配置腳本代碼詳細講解

Vue項目代碼詳細講解 1. jsconfig.json - JavaScript配置文件 {"compilerOptions": { // 編譯器選項配置"target": "es5", // 編譯目標&#xff1a;將代碼編譯為ES5版本&#xff0c;確保更好的瀏覽器兼容性"module": "esnext…

第一節:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入門

Vben Admin vben5 系列文章目錄 &#x1f4bb; 基礎篇 ? 第一節&#xff1a;Vben Admin 最新 v5.0 (vben5) Python Flask 快速入門 ? 第二節&#xff1a;Vben Admin 最新 v5.0 (vben5) Python Flask 快速入門 - Python Flask 后端開發詳解(附源碼) ? 第三節&#xff1a;V…

Guava中常用的工具類

1. 集合工具類&#xff08;com.google.common.collect&#xff09;Guava 對 Java 集合框架進行了豐富擴展&#xff0c;解決了標準集合的諸多痛點。&#xff08;1&#xff09;Lists / Sets / Maps:用于簡化集合創建和操作&#xff1a;// 創建不可變集合&#xff08;線程安全&…

redission實現讀寫鎖的原理

Redisson 實現分布式讀寫鎖的核心原理是 ?基于 Redis 的 Lua 腳本原子操作? ?Pub/Sub 通知機制&#xff0c;在保證強一致性的同時實現高效的讀并發&#xff08;讀不阻塞讀&#xff0c;寫阻塞讀&#xff09;。以下是其核心設計&#xff1a;?一、核心數據結構?Redisson 使用…

【 ??SQL注入漏洞靶場】第二關文件讀寫

SQLi-Labs?它是一個開源的、專門為學習 ??Web安全?? 和 ??SQL注入技術?? 而設計的靶場項目。開發者故意在代碼中留下了各種不同類型的SQL注入漏洞&#xff0c;讓安全研究人員、學生和愛好者可以在一個合法、安全的環境中進行實戰練習&#xff0c;從而掌握發現和利用SQ…

設計藝術~緩存結構設計

背景 面對高QPS場景的業務&#xff0c;不得不考慮對一些數據做緩存設計&#xff0c;常見的緩存設計有這些&#xff1a;DB Proxy緩存、分布式緩存、Localcache緩存。 在考慮加緩存的背景下不考慮數據的一致性&#xff0c;都是瞎扯&#xff0c;所以我們再定義一下數據的一致性場景…

后端開發技術棧

后端開發技術棧核心技術內容平臺 (Content Platform)電商 (E-Commerce)金融科技 (FinTech) / 支付物聯網 (IoT - Internet of Things)游戲后端 (Game Backend)社交平臺搜索平臺企業級應用開發音視頻處理后端地圖與地理位置服務DevOps大數據開發大模型應用開發智能合約開發核心技…

【ICCV2025】計算機視覺|即插即用|ESC:顛覆Transformer!超強平替,ESC模塊性能炸裂!

論文地址&#xff1a;https://arxiv.org/pdf/2503.06671 代碼地址&#xff1a;https://github.com/dslisleedh/ESC 關注UP CV縫合怪&#xff0c;分享最計算機視覺新即插即用模塊&#xff0c;并提供配套的論文資料與代碼。 https://space.bilibili.com/473764881 摘要 本研究…

【面試場景題】如何進行高并發系統的性能測試?

文章目錄一、明確測試目標與指標二、測試環境搭建三、測試工具選型四、測試場景設計五、執行測試與監控六、瓶頸分析與調優七、測試報告與迭代總結高并發系統的性能測試是驗證系統在極限流量下是否能保持穩定運行的關鍵環節&#xff0c;需要結合場景設計、工具選型、指標監控、…

攻防世界ReverseMe-120

這道題比較經典&#xff0c;涉及三個知識點&#xff0c;所以記錄一下。首先給了一個文件&#xff0c;detect it easy看了下&#xff0c;是32位exe。放入ida中&#xff0c;找下main函數&#xff0c;F5反編譯看一下偽代碼。int __cdecl main(int argc, const char **argv, const …

小白也能看懂,HTTP中的文件上傳與下載到底發生了什么?

HTTP 文件傳輸協議解析&#xff1a;上傳與下載 這份文檔會用最簡單的方式&#xff0c;帶你了解 HTTP 協議是如何處理文件下載和上傳的。我們會專注于協議本身&#xff0c;看看客戶端&#xff08;比如你的瀏覽器&#xff09;和服務端&#xff08;網站服務器&#xff09;之間到底…

快速構建數據集-假數據(生成劃分)

快速構建數據集-假數據1、torch.randn&#xff08;?&#xff09;2、HuggingFace Datasets&#xff08;?&#xff09;&#x1f539;1. 從字典生成&#x1f539;2. 從 pandas.DataFrame 生成&#x1f539;3. 批量生成“業務型”假數據&#xff08;配合 Faker&#xff09;&#…

[修訂版]Xenomai/IPIPE源代碼情景解析

[修訂版]Xenomai/IPIPE源代碼情景解析 第一章&#xff1a;Interrupt Pipeline介紹 1.1 I-pipe與Xenomai1.2 I-pipe核心概念1.3 拉取I-pipe代碼 第二章&#xff1a;I-pipe對ARM64異常的改造 2.1 ARM64中斷機制與異常處理2.2 EL0_IRQ 中斷改造之入口2.3 EL0_IRQ 中斷改造之中斷處…

【Qt開發】按鈕類控件(三)-> QCheckBox

目錄 1 -> 概述 2 -> 核心特性 2.1 -> 狀態管理 2.2 -> 信號機制 2.3 -> 外觀與文本 3 -> 應用場景 4 -> 代碼示例 5 -> 總結 1 -> 概述 QCheckBox 是 Qt 框架中提供的一個基礎控件&#xff0c;用于實現復選框功能。它允許用戶在兩種或三種…

在新發布的AI論文中 pytorch 和tensorflow 的使用比例

根據 2025 年最新的學術動態和行業報告&#xff0c;PyTorch 在 AI 論文中的使用比例已占據絕對主導地位&#xff0c;而 TensorFlow 的占比持續下降。以下是基于多個權威來源的綜合分析&#xff1a; 一、頂級會議中的框架分布 在 NeurIPS、ICML、CVPR 等頂級學術會議中&#xff…

3DXML格式是什么?用什么軟件可以打開?

3DXML 是一種開放標準的數據交換格式&#xff0c;主要用于三維 CAD&#xff08;計算機輔助設計&#xff09;模型的存儲和交換。它是由 Dassault Systmes 開發的一種文件格式&#xff0c;常用于 CATIA V6 和其他支持該格式的應用程序中。3DXML 文件可以包含完整的 3D 模型數據&a…

9月8日星期一今日早報簡報微語報早讀

9月8日星期一&#xff0c;農歷七月十七&#xff0c;早報#微語早讀。1、中國火箭與月亮同框&#xff0c;遙感四十號03組衛星發射成功&#xff1b;2、湖南郴州開發區改革&#xff1a;編制數由815名減至680名&#xff0c;精簡16.6%&#xff1b;3、水利部對廣東、廣西啟動洪水防御Ⅳ…

windows系統搭建MQTT服務器

1、MQTT 協議 MQTT協議&#xff1a;實現MQTT協議需要客戶端和服務器端通訊完成。 三種身份: 發布者(Publish)、代理(Broker)(服務器)、訂閱者(Subscribe)。 消息的發布者和訂閱者都是客戶端&#xff0c;消息代理是服務器&#xff0c;消息發布者可以同時是訂閱者。 MQTT&am…

從 GPT 到 LLaMA:解密 LLM 的核心架構——Decoder-Only 模型

&#x1f525;從 GPT 到 LLaMA&#xff1a;解密 LLM 的核心架構——Decoder-Only 模型 “為什么所有大模型&#xff08;LLM&#xff09;都長一個樣&#xff1f;” 因為它們都有一個共同的“基因”——Decoder-Only 架構。 在前面兩節中&#xff0c;我們學習了&#xff1a; BER…

Codeforces Round 1047 (Div. 3)

由于最近這三天的數學建模&#xff0c;讓我這個精力本來就不多的AI手更加力竭了&#xff0c;沒注意到昨晚的cf&#xff0c;所以今天來補題了。 比賽連接&#xff1a;比賽傳送門 A題&#xff1a; You are doing a research paper on the famous Collatz Conjecture. In your e…