一起來看看五條Python中的隱含特性

1. 引言

最近閑暇之餘,我會去閱讀一些Python文檔,有時候會註意到一些有趣的Python特性,這些特性不禁讓人驚呼:“哇,Python原來還可以這麼寫”。

閑話少說,我們直接開始吧。 :)

2. 函數屬性

和設置類和對象的屬性類似,我們在Python中也可以為函數設置屬性。樣例代碼如下:

def func(x):
    intermediate_var = x**2 + x + 1
    if intermediate_var % 2:
        y = intermediate_var ** 3
    else:
        y = intermediate_var **3 + 1
    # setting attributes here
    func.optional_return = intermediate_var
    func.is_awesome = 'Yes, my function is awesome.'
    return y
y = func(3)
print('Final answer is', y)
# Accessing function attributes
print('Show calculations -->', func.optional_return)
print('Is my function awesome? -->', func.is_awesome)

觀察上述代碼,我們在第9行設置函數屬性‘optional_return’在第10行設置屬性’is_awesome’.同時,在最後兩行的調用語句裡我們訪問瞭這兩個函數屬性的值。

上述代碼的運行結果如下:

Final answer is 2197
Show calculations –> 13
Is my function awesome? –> Yes, my function is awesome.

當我們希望選擇檢查一些函數中的中間變量,但不想每次調用函數時使用 return 語句顯式返回它時,上述函數屬性的寫法將會排上用場。

3. For-else循環

在 Python 中,我們可以在 for 循環中添加 else 語句。隻有在執行期間在循環體中沒有遇到 break 語句時才會觸發 else 語句。樣例代碼如下:

my_list = ['some', 'list', 'containing', 'five', 'elements']
min_len = 3
for element in my_list:
    if len(element) < min_len:
        print(f'Caught an element shorter than {min_len} letters')
        break
else:
    print(f'All elements at least {min_len} letters long'

上述代碼輸出如下:

All elements at least 3 letters long

觀察上述代碼,else 在 for 級別縮進,而不是在 if 級別縮進。在這裡,沒有任何元素的長度小於 3。因此,將永遠不會遇到 break 語句。因此,else 子句將被觸發(在執行 for 循環之後)並打印上面顯示的輸出。

4. int型分隔符

一般來說,從視覺效果上看人眼很難分辨出數字10000000 和100000000 ,在Python中我們不能像英語那樣直接使用逗號分隔符來將數字隔開,這是因為Python會將逗號分隔開的數字解釋為多個整數的元組。

但是,Python也有一種方便的方式來處理這種情形:我們可以使用下劃線當做分隔符來提升數字的可讀性,此時數字1_000_000將被解釋成整形數字並增加瞭可讀性。

代碼樣例如下:

a = 3250
b = 67_543_423_778
print(type(a))
print(type(b))
print(type(a)==type(b))

運行結果如下:

<class 'int'>
<class 'int'>
True

5. eval() and exec()

Python 具有動態讀取字符串並將其視為一段 Python 代碼的能力。這主要是通過使用 eval() 和 exec() 函數來實現的(“eval”用於評估表達式,“exec”用於執行語句)。

代碼舉例如下:

a = 3
b = eval('a + 2')
print('b =', b)
exec('c = a ** 2')
print('c is', c)

運行結果如下:

b = 5
c is 9

上述代碼中,eval() 函數將輸入字符串作為 Python 表達式讀取,對其求值,並將結果分配給變量“b”。同時,exec() 函數將輸入字符串作為 Python 語句讀取並執行。

6. 省略號

省略號或“…”是 Python 的內置常量,類似於 None、True、False 等內置常量。它可以以不同的方式使用,包括但不限於:

6.1 占位符

和 pass 類似,省略號可以在代碼沒有寫完整的時候用作占位符,舉例如下:

def some_function():
    ...
def another_function():
    pass

6.2 numpy數組中用於切片

NumPy中使用省略號可以對數組進行切片。以下代碼顯示瞭對 NumPy 數組進行切片的兩種等效方法:

import numpy as np
a = np.arange(16).reshape(2,2,2,2)
print(a[..., 0].flatten())
print(a[:, :, :, 0].flatten())

結果如下:

[ 0  2  4  6  8 10 12 14]
[ 0  2  4  6  8 10 12 14]

7.總結

Python 不僅是一門有用的語言,而且是一門非常有趣的語言。我們都忙於生活工作,但為瞭更好地瞭解語言本身的一些特性並沒有什麼壞處。在本文中,重點介紹瞭5個Python中隱含的特性,並給出瞭相關代碼的講解。

 本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!   

推薦閱讀: