一、getattr()
getattr()函數是Python内置函數之一,用于擷取一個對象的屬性值。在Python中,一切皆為對象,包括子產品、類、執行個體等,而屬性則是對象所具有的特定變量或方法。
getattr()函數的文法如下:
getattr(object, name[, default])
其中,object參數是要擷取屬性值的對象,name參數是要擷取的屬性名,default參數是可選的,表示如果對象沒有該屬性,則傳回預設值。
getattr()函數的作用是在運作時擷取對象的屬性值,而不需要在代碼中提前定義這些屬性。這種動态擷取屬性值的特性為Python程式設計提供了很大的靈活性。
下面舉例說明getattr()函數的用法和功能:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("Tom", 20)
# 擷取對象屬性值
print(getattr(person, "name")) # 輸出 "Tom"
print(getattr(person, "age")) # 輸出 20
# 擷取不存在的屬性,傳回預設值
print(getattr(person, "gender", "unknown")) # 輸出 "unknown"
在上面的例子中,我們建立了一個Person類的執行個體person,并使用getattr()函數擷取了person對象的name和age屬性值。同時,我們使用getattr()函數擷取了一個不存在的屬性gender,并設定了預設值為unknown,進而避免了程式抛出AttributeError異常。
總之,getattr()函數能夠在運作時擷取對象的屬性值,為Python程式設計提供了很大的靈活性,特别是在處理動态對象或動态屬性時更加實用。
二、globals
概念
globals()函數是Python3内置的一個函數,它傳回目前作用域内的全局變量的字典。全局變量是指在函數之外定義的變量,或者在函數内部使用global關鍵字聲明的變量。
用法
globals()函數不需要傳入任何參數,直接調用即可。
功能和作用
globals()函數的主要作用是擷取目前作用域内的全局變量的字典,這個字典包含了目前作用域中所有全局變量的名稱和值。可以使用這個字典來檢視、修改和删除全局變量。
舉例說明
下面是一個簡單的示例,示範了globals()函數的用法和功能:
x = 10 # 全局變量
def foo():
y = 20 # 局部變量
print(globals())
foo() # 輸出全局變量字典
# 輸出:
# {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'x': 10, 'foo': <function foo at 0x7f0e6b19f5e0>}
上面的示例中,定義了一個全局變量x和一個函數foo()。在foo()函數内部,定義了一個局部變量y,然後調用了globals()函數來輸出目前作用域内的全局變量字典。
運作程式後,我們可以看到輸出結果中包含了x和foo兩個全局變量的名稱和值。注意,函數foo()本身也是一個全局變量,是以也出現在了字典中。
三、hasattr
概念
hasattr()函數是Python内置函數之一,用于判斷一個對象是否有指定的屬性或方法。
用法
hasattr()的文法如下:
hasattr(object, name)
其中,object表示要檢查的對象,name表示要檢查的屬性或方法名。
函數傳回一個布爾值,如果object對象有指定的屬性或方法,則傳回True,否則傳回False。
作用和功能
hasattr()函數主要用于檢查一個對象是否具有某個特定屬性或方法,以便在運作時進行動态的操作。
例如,在實際開發中,我們可能需要根據某個對象是否有指定的屬性或方法來進行分支處理,或者在調用某個方法之前先檢查對象是否有該方法等。
舉例說明
class Person:
def __init__(self, name):
self.name = name
def say_hello(self):
print('Hello, my name is', self.name)
上面定義了一個Person類,有一個name屬性和一個say_hello()方法。
現在,我們可以使用hasattr()函數來檢查一個Person對象是否有name屬性和say_hello()方法:
p = Person('John')
print(hasattr(p, 'name')) # True
print(hasattr(p, 'age')) # False
print(hasattr(p, 'say_hello')) # True
運作結果如下:
True
False
True
可以看到,p對象有name屬性和say_hello()方法,但沒有age屬性。
四、hash
hash()函數是将一個可哈希的對象作為參數,傳回該對象的哈希值。哈希值是一個整數,用于表示該對象在哈希表中的位置,可以用于快速比較和查找。
hash()函數的用法為:hash(object)
其中,object是可哈希的對象,比如字元串、元組、整數等等。不可哈希的對象包括清單、字典、集合等等。
hash()函數的作用是通過雜湊演算法将一個對象映射成一個唯一的整數,該整數可以用于判斷兩個對象是否相等,以及在哈希表中查找該對象的位置。
下面是一些示例:
# 字元串
print(hash('hello world')) # -1438022773
# 元組
print(hash((1, 2, 3))) # 529344067295497451
# 整數
print(hash(123)) # 123
# 不可哈希的對象
print(hash([1, 2, 3])) # TypeError: unhashable type: 'list'
需要注意的是,哈希值并不是對象的唯一辨別符,因為不同的對象可能具有相同的哈希值。此外,雜湊演算法的性質決定了哈希值無法進行逆運算,即無法從哈希值還原出原始的對象。