從JavaScript快速上手Python:關鍵差異與核心技巧

引言

如果你是JavaScript開發者,可能會對Python的簡潔語法和豐富的生態感興趣。但兩種語言的設計哲學和實現細節存在顯著差異。本文將通過對比JS與Python的核心概念,幫助你快速過渡,避免“踩坑”。


一、語法差異:告別大括號,擁抱縮進

1.1 代碼塊與縮進

Python用縮進(通常4空格)替代JS的大括號,強制代碼可讀性:

# Python
if x > 0:print("Positive")  # 縮進表示代碼塊
else:print("Non-positive")
// JavaScript
if (x > 0) {console.log("Positive");
} else {console.log("Non-positive");
}

注意:混合制表符(Tab)和空格會導致錯誤,建議IDE設置為“4空格縮進”。


1.2 變量與類型

  • 無需聲明關鍵字:直接賦值即可
    name = "Alice"     # 字符串
    age = 30           # 整數
    is_active = True   # 布爾(首字母大寫)
    
  • 動態類型:變量可隨時改變類型
    x = 10      # 整數
    x = "hello" # 變為字符串(合法但需謹慎)
    

對比JS:Python沒有let/const/var,也沒有變量提升(Hoisting)行為。


二、數據類型:列表、字典與元組

2.1 列表(List) vs 數組(Array)

Python列表類似JS數組,但方法名不同:

fruits = ["apple", "banana"]
fruits.append("cherry")   # JS: push()
last = fruits.pop()       # JS: pop()
fruits.insert(1, "mango") # 在索引1插入

2.2 字典(Dict) vs 對象(Object)

Python字典是鍵值對集合,但鍵必須是不可變類型(如字符串、數字):

user = {"name": "Bob","age": 25,"skills": ["Python", "JS"]
}
email = user.get("email", "default@example.com")  # 安全獲取

2.3 元組(Tuple):不可變序列

類似被Object.freeze()處理后的JS數組:

colors = ("red", "green", "blue")  # 創建后無法修改

三、函數:參數靈活,作用域清晰

3.1 定義與調用

使用def關鍵字,無需括號包裹參數:

def greet(name, greeting="Hello"):return f"{greeting}, {name}!"  # f-string格式化(Python 3.6+)print(greet("Alice"))              # "Hello, Alice!"
print(greet("Bob", greeting="Hi")) # "Hi, Bob!"

對比JS

  • 參數默認值直接在定義時設置(無需||兜底)
  • 支持關鍵字參數(明確指定參數名,提高可讀性)

3.2 作用域規則

  • 無變量提升,函數內修改全局變量需global聲明:
    count = 0
    def increment():global countcount += 1
    

四、循環與迭代:更簡潔的語法

4.1 for循環

直接迭代元素,無需索引:

fruits = ["apple", "banana", "mango"]
for fruit in fruits:print(fruit)

需要索引時用enumerate

for index, fruit in enumerate(fruits):print(f"Index {index}: {fruit}")

4.2 range函數

替代JS的for (let i=0; i<n; i++)

for i in range(3):     # 0, 1, 2print(i)
for i in range(1, 4):  # 1, 2, 3print(i)

五、模塊與包管理:生態利用

5.1 導入模塊

類似require,但語法更靈活:

import math
print(math.sqrt(16))  # 4.0from datetime import datetime  # 按需導入
now = datetime.now()

5.2 包管理工具pip

安裝第三方庫(類似npm):

pip install requests  # 安裝HTTP庫
pip freeze > requirements.txt  # 生成依賴清單

六、異步編程:async/await的另一種實現

Python的async/await語法與JS相似,但需依賴asyncio庫:

import asyncioasync def fetch_data():await asyncio.sleep(1)return "Data"async def main():data = await fetch_data()print(data)  # 輸出 "Data"asyncio.run(main())

注意:Python的異步生態(如HTTP客戶端、數據庫驅動)通常需選擇兼容async的庫(如aiohttp)。


七、面向對象編程:類與繼承

Python使用class關鍵字,構造函數為__init__

class Animal:def __init__(self, name):self.name = namedef speak(self):raise NotImplementedError("子類必須實現此方法")class Dog(Animal):def speak(self):return "Woof!"dog = Dog("Buddy")
print(dog.speak())  # "Woof!"

關鍵差異

  • 顯式傳遞self參數(類似JS的this
  • 繼承語法更簡潔(class SubClass(ParentClass)

八、避坑指南:常見問題

8.1 作用域陷阱

函數內修改全局變量需global聲明:

x = 10
def update():global xx = 20
update()
print(x)  # 20

8.2 布爾運算符

使用單詞而非符號:

if a and b:    # JS: &&
if c or d:     # JS: ||
if not e:      # JS: !

8.3 值比較

  • ==:比較值是否相等
  • is:比較對象身份(類似JS的===用于對象)
    a = [1, 2]
    b = [1, 2]
    print(a == b)  # True
    print(a is b)  # False
    

九、學習路徑建議

  1. 基礎鞏固:完成Python官方教程(docs.python.org)
  2. 實戰項目
    • 用Flask/Django重寫Express項目
    • 用Pandas處理JSON/CSV數據
  3. 進階資源
    • 書籍:《Python Crash Course》《Fluent Python》
    • 視頻:Corey Schafer的Python教程(YouTube)

結語

Python以其簡潔性和強大的庫生態,成為自動化、數據分析、Web開發等領域的利器。通過對比JS與Python的核心差異,開發者可快速遷移技能。建議從一個小工具腳本開始實踐,逐步深入理解Python的設計哲學。

討論點:你在從JS轉向Python時遇到了哪些挑戰?歡迎在評論區分享經驗!

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

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

相關文章

TransmittableThreadLocal實現上下文傳遞-筆記

1.TransmittableThreadLocal簡介 com.alibaba.ttl.TransmittableThreadLocal&#xff08;簡稱 TTL&#xff09;是阿里巴巴開源的一個工具類&#xff0c;旨在解決 ThreadLocal 在線程池中無法傳遞上下文變量 的問題。它是對 InheritableThreadLocal 的增強&#xff0c;尤其適用…

TDengine 安全部署配置建議

背景 TDengine 的分布式、多組件特性導致 TDengine 的安全配置是生產系統中比較關注的問題。本文檔旨在對 TDengine 各組件及在不同部署方式下的安全問題進行說明&#xff0c;并提供部署和配置建議&#xff0c;為用戶的數據安全提供支持。 安全配置涉及組件 TDengine 包含多…

在Cursor中啟用WebStorm/IntelliJ風格快捷鍵

在Cursor中啟用WebStorm/IntelliJ風格快捷鍵 方法一&#xff1a;使用預置快捷鍵方案 打開快捷鍵設置 Windows/Linux: Ctrl K → Ctrl SmacOS: ? K → ? S 搜索預設方案 在搜索框中輸入keyboard shortcuts&#xff0c;選擇Preferences: Open Keyboard Shortcuts (JSON) …

python打卡day30@浙大疏錦行

知識點回顧&#xff1a; 導入官方庫的三種手段導入自定義庫/模塊的方式導入庫/模塊的核心邏輯&#xff1a;找到根目錄&#xff08;python解釋器的目錄和終端的目錄不一致&#xff09; 作業&#xff1a;自己新建幾個不同路徑文件嘗試下如何導入 具體操作步驟&#xff1a; 在桌面…

【kafka】基本命令

創建 Kafka Topic 的命令 以下是創建 Kafka Topic 的幾種常用方法&#xff1a; 1. 使用 kafka-topics.sh 基礎命令&#xff08;Kafka 自帶工具&#xff09; bin/kafka-topics.sh --create \--bootstrap-server <broker地址:端口> \--topic <topic名稱> \--parti…

編程速遞:適用于 Delphi 12.3 的 FMX Linux 現已推出

Embarcadero非常高興地宣布&#xff0c;用于使用Delphi構建Linux客戶端應用程序的FMX Linux UI庫再次在RAD Studio 12.3版本以及RAD Studio 12.2版本中提供支持&#xff0c;同時也適用于更早的版本。 作為RAD Studio的一個附加庫&#xff0c;FMX Linux為開發面向Linux的圖形用…

通過實例講解螺旋模型

目錄 一、螺旋模型的核心概念 二、螺旋模型在電子商城系統開發中的應用示例 第 1 次螺旋:項目啟動與風險初探

vue3 vite 路由

如路由是這種格式 http://localhost:7058/admin/product/brand路由配置如下 import { createRouter, createWebHistory } from vue-router import HomeView from ../views/HomeView.vue import NProgress from nprogress; import nprogress/nprogress.css; import {errorRour…

【Redis】Hash 存儲相比 String 存儲的優勢

在 Redis 中&#xff0c;Hash 存儲相比 String 存儲具有以下 優勢&#xff0c;特別適用于某些特定場景&#xff1a; ? 1. 更節省內存&#xff08;尤其適合存儲對象&#xff09; Hash 內部使用壓縮列表&#xff08;ziplist&#xff09;或哈希表實現&#xff0c;在數據量較小時…

CSS詳解:特性、選擇器與優先級

CSS詳解&#xff1a;特性、選擇器與優先級 目錄 CSS詳解&#xff1a;特性、選擇器與優先級一、CSS的核心特性1. 層疊性&#xff08;Cascading&#xff09;2. 繼承性&#xff08;Inheritance&#xff09;3. 優先級&#xff08;Specificity&#xff09;4. 響應式設計5. 動畫與過渡…

《算法導論(第4版)》閱讀筆記:p86-p90

《算法導論(第4版)》學習第 19 天&#xff0c;p83-p85 總結&#xff0c;總計 3 頁。 一、技術總結 無。 二、英語總結(生詞&#xff1a;2) 1. inkling (1)inkling: inclen(“utter in an undertone&#xff0c;低聲說話”) c. a hint(提示)&#xff1b;a slight knowledg…

nginx概念及使用

一、Nginx 核心概念 Nginx&#xff08;發音為 "engine-x"&#xff09;是一個高性能、開源的 Web 服務器和反向代理服務器&#xff0c;由俄羅斯工程師伊戈爾?賽索耶夫&#xff08;Igor Sysoev&#xff09;于 2004 年開發&#xff0c;最初用于解決當時高并發場景下 Ap…

2025藍橋杯JAVA編程題練習Day8

1. 路徑 題目描述 小藍學習了最短路徑之后特別高興&#xff0c;他定義了一個特別的圖&#xff0c;希望找到圖 中的最短路徑。 小藍的圖由 2021 個結點組成&#xff0c;依次編號 1 至 2021。 對于兩個不同的結點 a, b&#xff0c;如果 a 和 b 的差的絕對值大于 21&#xff0…

【趙渝強老師】Memcached的路由算法

Memcached支持兩種不同方式的客戶端路由算法&#xff0c;即&#xff1a;求余數Hash算法和一致性Hash算法。下面分別進行介紹。 一、 求余數的路由算法 求余數Hash算法的客戶端路由是對插入數據的鍵進行求余數&#xff0c;根據余數來決定存儲到哪個Memcached實例。 視頻講解如…

NLP學習路線圖(一): 線性代數(矩陣運算、特征值分解等)

引言&#xff1a;語言與矩陣的奇妙邂逅 在自然語言處理&#xff08;NLP&#xff09;的魔法世界里&#xff0c;每個詞語都像被施了變形術的精靈&#xff0c;在數學的殿堂中翩翩起舞。當我們用"king - man woman queen"這樣的向量魔法破解語義密碼時&#xff0c;線性…

BUUCTF PWN刷題筆記(持續更新!!)

ciscn_2019_c_1 64位&#xff0c;沒有開啟保護。點進去沒發現明顯的漏洞函數&#xff0c;考慮泄露libc基地址的rop構造。先看看有多少gadget 估計也夠用了。puts函數只接受一個參數&#xff0c;觀看匯編看看用的哪個寄存器傳輸的參數。 用的是edi。但是我們怎么找到so的版本呢…

Java EE初階——線程安全

1. 線程的狀態 1. 線程狀態分類&#xff08;Thread.State 枚舉&#xff09; Java 定義了 6 種線程狀態&#xff0c;這些狀態均由 java.lang.Thread.State 枚舉表示&#xff1a; NEW&#xff08;新建&#xff09; 線程對象已創建&#xff0c;但尚未調用 start() 方法。此時線程…

Vue 3.0中響應式依賴和更新

響應式依賴和更新是Vue 3.0中最重要的機制&#xff0c;其核心代碼如下&#xff0c;本文將結合代碼對這個設計機制作出一些解釋。 // 全局依賴存儲&#xff1a;WeakMap<target, Map<key, Set<effect>>> const targetMap new WeakMap();// 當前活動的副作用函…

一、內存調優

一、內存調優 什么是內存泄漏 監控Java內存的常用工具 內存泄露的常見場景 內存泄露的解決方案 內存泄露與內存溢出的區別 內存泄露&#xff1a;在Java中如果不再使用一個對象&#xff0c;但是該對象依然在GC ROOT的引用鏈上&#xff0c;這個對象就不會被垃圾回收器回收&…

Linux /etc/rc.d/init.d/

在傳統的 SysV init 系統中&#xff0c;服務啟動腳本通常位于 /etc/rc.d/init.d/ 目錄下。這些腳本可以直接執行以啟動、停止或重啟服務&#xff0c;并且可以接受參數如 start, stop, status 等。 如果你想知道位于 /etc/rc.d/init.d/ 目錄下的某個腳本文件實際上指向哪里,如果…