CodeGym /課程 /Python SELF TW /內建函數

內建函數

Python SELF TW
等級 13 , 課堂 1
開放

1.1 常用內建函數列表

我們已經認識了許多內建函數,但我還想介紹幾個在不久的將來會對你有幫助的函數:

  • id()
  • hash()
  • dir()

以下是它們的詳細介紹:

函數 id()

函數 id() 返回唯一的 對象標識符(數字)。這個標識符是一個整數,在對象存在期間保持唯一。 通常,標識符對應於內存中對象的地址,雖然 Python 的規範中沒有保證這一點。

可以使用對象的唯一標識符來更好地理解許多操作,例如,更好地理解哪些地方對象被複製, 哪些地方我們參考到相同的對象。相同的對象將有不同的標識符,但對相同對象的引用將顯示相同的標識符。

可以在程序調試期間使用,了解 Python 如何在內存中管理對象。


a = [1, 2, 3]
b = a
print(id(a))  # 輸出 'a' 對象的標識符
print(id(b))  # 輸出相同的標識符,因為 'b' 引用了相同的對象

函數 hash()

函數 hash() 返回指定對象的哈希值(數字),如果它是可哈希的。 在 Python 中,可哈希對象必須是不可變的,並在其生命周期中保持恆定的哈希值。

此類對象的示例包括數字、字符串和元組(如果其所有元素也可哈希)。 哈希值在字典和集合中用於快速查找操作。用於優化查找和存儲數據,在需要快速檢查相等性和唯一性的地方。


print(hash("hello"))  # 返回字符串 "hello" 的哈希值
print(hash(42))       # 返回數字 42 的哈希值
print(hash((1, 2, 3)))  # 返回元組 (1, 2, 3) 的哈希值

重要! 不可變對象的哈希值在其生命周期中保持恆定。 然而,可變對象(如列表和字典)不是可哈希的,不能用作字典的鍵或集合的元素。

函數 dir()

函數 dir() 返回一個對象的屬性和方法列表。如果未指定對象, dir() 返回當前本地範圍內的名稱列表。這個函數對於研究對象的結構和屬性非常有用。

用於獲取對象的所有屬性和方法列表,這有助於更好地理解其結構和可用功能。 在調試和研究對象時經常使用,尤其是在文檔有限或不可用時。


class MyClass:
    def __init__(self):
        self.name = "Alice"
            
    def greet(self):
        print("Hello, " + self.name)
        
obj = MyClass()
print(dir(obj))  # 輸出對象 'obj' 的屬性和方法列表
print(dir())     # 輸出當前本地範圍內的名稱列表

1.2 使用集合

還有一些對於使用集合非常有用的函數。 也許它們在更早的講座中提到過,但現在我想稍微仔細講一下。

  • zip()
  • min()
  • max()
  • sum()
  • count()

函數 zip()

函數 zip() 組合多個可迭代對象(如列表、元組、字符串)並返回元組的迭代器。 每個元組包含從所有可迭代對象相同索引位置收集的元素。

常用於合併來自多個可迭代對象的數據,允許同時輕鬆地迭代它們。 並且用於從兩個列表創建字典——一個用於鍵,另一個用於值。


names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
combined = zip(names, ages)
print(list(combined))  # 輸出: [('Alice', 25), ('Bob', 30), ('Charlie', 35)]

函數 max()

函數 max() 返回給定可迭代對象或多個給定參數中最大的元素。 還可以指定關鍵函數以確定比較規則。


numbers = [1, 2, 3, 4, 5]
print(max(numbers))  # 輸出: 5
            
# 使用關鍵函數
words = ["apple", "banana", "cherry"]
print(max(words, key=len))  # 輸出: 'banana'

函數 min()

函數 min() 返回給定可迭代對象或多個給定參數中最小的元素。 還可以指定關鍵函數以確定比較規則。


numbers = [1, 2, 3, 4, 5]
print(min(numbers))  # 輸出: 1
        
# 使用關鍵函數
words = ["apple", "banana", "cherry"]
print(min(words, key=len))  # 輸出: 'apple'

函數 count()

函數 count() 用於計算元素在可迭代對象(如列表或字符串)中出現的次數。 在列表、集合或迭代器上調用。


numbers = [1, 2, 2, 3, 4, 2, 5]
print(numbers.count(2))  # 輸出: 3
    
text = "hello world"
print(text.count("o"))  # 輸出: 2

函數 sum()

函數 sum() 返回可迭代對象中所有元素的和。 可以選擇指定初始值,將添加到總和中。


numbers = [1, 2, 3, 4, 5]
print(sum(numbers))  # 輸出: 15
    
# 指定初始值
print(sum(numbers, 10))  # 輸出: 25
    

1.3 執行代碼

還有兩個函數,對於新手來說可能會很有用:

  • eval()
  • exec()

它們具有強大的功能,但由於潛在的安全風險,使用時需要謹慎。以下是有關每個函數的詳細信息:

函數 eval()

函數 eval(expression) 接受一個字符串並將其作為 Python 表達式執行。 它返回該表達式的執行結果。用於將字符串表達式計算為 Python 代碼。

示例:


x = 10
result = eval("x + 5")
print(result)  # 輸出: 15

函數 exec()

函數 exec() 接受一個字符串並將其作為 Python 代碼執行。 與 eval() 僅能執行表達式不同,exec() 可以執行任何 Python 語句, 包括函數定義、循環和模塊導入。此函數不返回值。

用於執行動態腳本並在程序運行期間定義新的函數或類。


code = """
def greet(name):
    print(f"Hello, {name}!")
        
greet("Alice")
"""
exec(code)
# 輸出: Hello, Alice!

重要!eval() 一樣,exec() 使用不信任的輸入數據時可能是危險的。 請謹慎使用,避免在 production 上使用 exec() 來執行代碼。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION