JavaScript還是Python?

我寫了一本關於JavaScript的書,還寫了一本關於Python的書,人們經常問我一個問題,該從哪個開始? 它們都非常適合初學者,並且非常受歡迎。 它們的區別在於你可以用它們做什麼。 它們都是動態且通用的程式語言,但JavaScript在瀏覽器中運行的優勢巨大,所以它在前端開發中被廣泛使用。 Python在數據科學和機器學習的應用中表現出色,有許多針對該領域開發的套件,所以你可以根據這一點來做出決定。 如果你猶豫不決無法做出決定,我建議你學校教授的那種語言,或者是你想要開發的項目所使用的語言。或者是你想要工作的公司所使用的語言。 如果你還是猶豫不決,那就由我來幫你選擇。我會推薦JavaScript,因為我認為它更加靈活,而且可以在瀏覽器中運行這一事實是一個巨大的優勢。

PEP8 Python 格式指南

在撰寫程式碼時,應該遵循所使用的程式語言的慣例。 如果從一開始就學習正確的命名和格式慣例,閱讀別人編寫的程式碼會更容易,而且別人閱讀你的程式碼也會更輕鬆。 Python 在 PEP8 格式指南中定義了自己的慣例。PEP 代表「Python Enhancement Proposals」,這是所有 Python 語言增強和討論的地方。有很多 PEP 提案,都可以在 https://www.python.org/dev/peps/ 找到。 PEP8 是其中一個最早的提案,也是其中一個最重要的。它定義了程式碼的格式,並提供了一些如何以「Pythonic」的方式撰寫 Python 程式碼的規則。 你可以在這裡閱讀完整的內容:https://www.python.org/dev/peps/pep-0008/,但以下是一個快速摘要,可以讓你快速開始: 使用空格縮排,而非使用 TAB 鍵縮排 使用 4 個空格進行縮排 Python 檔案的編碼為 UTF-8 程式碼的每行不要超過 80 個字元 每個陳述式獨立成行 函數、變數名稱和檔案名稱都使用小寫,單字之間使用底線分隔(snake_case) 類別名稱使用大寫開頭,單字之間使用大寫字母分隔(CamelCase) 套件名稱使用小寫,單字之間不使用底線分隔 不應更改的變數(常數)使用大寫 變數名稱應具有意義 添加有用的註解,但避免明顯的註解 在運算子周圍添加空格 不要使用不必要的空白 在函數之前添加一行空白 在類別的方法之間添加一行空白 在函數/方法內部,可以使用空白行將相關的程式碼區塊分隔開來以提高可讀性

Python 2 vs Python 3

從一開始就有一個重要的主題需要討論,那就是 Python 2 和 Python 3 的比較。 Python 3 於 2008 年推出,並成為主要的 Python 版本,而 Python 2 則繼續維護修復錯誤和安全漏洞,直到 2020 年初。 在那個日期之後,終止了對 Python 2 的支援。 許多程式仍然使用 Python 2 來撰寫,且組織仍然積極地在進行這方面的工作,因為將程式遷移到 Python 3 不是一個簡單的任務,而且這些程式需要大量的工作才能進行升級。此外,重要的遷移總是會引入新的錯誤。 但是,除非您必須遵守組織設定的規則,強制使用 Python 2,否則所有新的程式都應該使用 Python 3 來撰寫。

Python Docstrings

文檔是非常重要的,不僅可以與其他人溝通函數/類/方法/模塊的目標,也可以幫助自己記住這些知識。 當你6個月或12個月後回到你的代碼時,你可能不記得心中所保存的所有知識,通讀代碼並理解其目的將變得困難得多。 註釋(Comments)是一種方式: num = 1 #這是另一個註釋 另一種方式是使用文檔字符串(docstrings)。 文檔字符串的好處在於它們遵循慣例,因此可以自動處理。 這是如何為函數定義文檔字符串: def increment(n): """增加一個數字""" return n + 1 這是如何為類和方法定義文檔字符串: class Dog: """表示一只狗的類""" def __init__(self, name, age): """初始化一只新狗""" self.name = name self.age = age def bark(self): """讓狗叫""" print('WOF!') 通過在文件頂部放置一個文檔字符串來為模塊進行文檔,例如假設這是dog.py: """狗模塊 這個模塊做...佈拉佈拉佈拉,並提供以下類: - Dog ... """ class Dog: """表示一只狗的類""" def __init__(self, name, age): """初始化一只新狗""" self.name = name self.age = age def bark(self): """讓狗叫""" print('WOF!') 文檔字符串可以跨越多行: def increment(n): """增加 一個數字 """ return n + 1 Python會處理這些文檔字符串,你可以使用help()全局函數來獲取類/方法/函數/模塊的文檔。...

Python Lambda 函數

Lambda 函數(也稱為匿名函數)是沒有名字且只有一個表達式作為其函體的小型函數。 在 Python 中,它們使用 lambda 關鍵字來定義: lambda <參數> : <表達式> 函體必須是單個表達式。注意,這是表達式,而不是語句。 這個差異很重要。一個表達式返回一個值,而一個語句則不會。 最簡單的 lambda 函數示例是將數字的值加倍: lambda num : num * 2 Lambda 函數可以接受多個參數: lambda a, b : a * b Lambda 函數不能直接調用,但可以將它們分配給變量: multiply = lambda a, b : a * b print(multiply(2, 2)) # 4 Lambda 函數在與其他 Python 功能(例如 map()、filter() 和 reduce())結合使用時非常有用。

Python List Comprehensions

Python 列表推導式 列表推導式(List comprehensions)是一種非常簡潔的方法來創建列表。 假設你有一個列表: numbers = [1, 2, 3, 4, 5] 你可以使用列表推導式來創建一個新的列表,該列表由 numbers 列表元素的平方組成: numbers_power_2 = [n**2 for n in numbers] 在某些情況下,列表推導式的語法比循環更易讀,特別是當操作可以寫在一行上時: numbers_power_2 = [] for n in numbers: numbers_power_2.append(n**2) 也比 map() 函數更易讀: numbers_power_2 = list(map(lambda n: n**2, numbers))

Python 元組

元組是另一種基本的 Python 數據結構。 它們允許你創建不可變的對象組。這意味著一旦創建了元組,它就無法被修改。你無法添加或刪除項目。 它們的創建方式與列表類似,但使用圓括號而不是方括號: names = ("Roger", "Syd") 元組是有序的,就像列表一樣,所以你可以通過索引值獲取它的值: names[0] # "Roger" names[1] # "Syd" 你還可以使用 index() 方法: names.index('Roger') # 0 names.index('Syd') # 1 與字符串和列表一樣,使用負索引將從末尾開始搜索: names[-1] # True 你可以使用 len() 函數計算元組中的項目數量: len(names) # 2 你可以使用 in 運算符檢查一個項目是否包含在元組中: print("Roger" in names) # True 你還可以使用切片提取元組的一部分: names[0:2] # ('Roger', 'Syd') names[1:] # ('Syd',) 使用 len() 全局函數獲取元組中的項目數量,與我們用於獲取字符串的長度相同: len(names) #2 你可以使用 sorted() 全局函數創建元組的排序版本: sorted(names) 你可以使用 + 運算符從現有元組中創建新的元組: newTuple = names + ("Vanille", "Tina")

Python 內省

使用 內省(introspection) 可以分析函數、變量和物件。 首先,可以使用 help() 全域函數以文件字串(docstrings)的形式獲取文件。 然後,可以使用 print() 函數來獲取關於函數的資訊: def increment(n): return n + 1 print(increment) 或者物件的資訊: class Dog(): def bark(self): print('WOF!') roger = Dog() print(roger) type() 函數可以提供物件的類型: print(type(increment)) print(type(roger)) print(type(1)) print(type('test')) dir() 全域函數可以查找物件的所有方法和屬性: print(dir(roger)) id() 全域函數可以顯示任何物件在記憶體中的位置: print(id(roger)) # 140227518093024 print(id(1)) # 140227521172384 這可以用來檢查兩個變數是否指向同一個物件。 Python 的標準庫模組 inspect 提供了更多獲取物件資訊的工具,可以在這裡查看詳細內容:https://docs.python.org/3/library/inspect.html

Python 列舉

列舉是綁定到常量值的可讀名稱。 要使用列舉,請從 enum 標準庫模塊中導入 Enum : from enum import Enum 然後可以以此方式初始化一個新的列舉: class State(Enum): INACTIVE = 0 ACTIVE = 1 一旦這樣做了,您就可以引用 State.INACTIVE 和 State.ACTIVE,它們扮演常量的角色。 現在,如果您嘗試打印 State.ACTIVE,例如: print(State.ACTIVE) 它不會返回 1,而是返回 State.ACTIVE。 可以通過列舉分配的數字來達到相同的值:print(State(1)) 將返回 State.ACTIVE。使用方括號表示法 State['ACTIVE'] 也是如此。 但是您可以使用 State.ACTIVE.value 來獲取值。 您可以列出列舉的所有可能值: list(State) # [<State.INACTIVE: 0>, <State.ACTIVE: 1>] 您可以計算個數: len(State) # 2

Python 字典

字典是一種非常重要的 Python 資料結構。 列表可以用來創建值的集合,而字典則可以創建鍵 / 值對的集合。 這是一個包含一個鍵值對的字典範例: dog = { 'name': 'Roger' } 鍵可以是任何不可變的值,例如字串、數字或元組。值可以是任何你想要的資料。 字典可以包含多個鍵值對: dog = { 'name': 'Roger', 'age': 8 } 你可以使用下面的語法來訪問單個鍵的值: dog['name'] # 'Roger' dog['age'] # 8 使用相同的語法,你可以更改特定位置存儲的值: dog['name'] = 'Syd' 另一種方法是使用 get() 方法,該方法可以添加默認值: dog.get('name') # 'Roger' dog.get('test', 'default') # 'default' pop() 方法檢索鍵的值,並從字典中刪除該項目: dog.pop('name') # 'Roger' popitem() 方法檢索並刪除最後插入字典的鍵/值對: dog.popitem() 你可以利用 in 運算符來檢查一個鍵是否包含在字典中: 'name' in dog # True 使用 keys() 方法可以獲取字典中的所有鍵,並將結果傳遞給 list() 構造函數: list(dog.keys()) # ['name', 'age'] 使用 values() 方法可以獲取字典中的所有值,並使用 items() 方法獲取鍵/值對的元組:...