Linux中國

Python 3.5 帶給我們的方便的矩陣以及其他改進

這是 Python 3.x 首發特性系列文章的第六篇。Python 3.5 在 2015 年首次發布,儘管它已經發布了很長時間,但它引入的許多特性都沒有被充分利用,而且相當酷。下面是其中的三個。

@ 操作符

@ 操作符在 Python 中是獨一無二的,因為在標準庫中沒有任何對象可以實現它!它是為了在有矩陣的數學包中使用而添加的。

矩陣有兩個乘法的概念。元素積是用 * 運算符完成的。但是矩陣組合(也被認為是乘法)需要自己的符號。它是用 @ 完成的。

例如,將一個「八轉」矩陣(將軸旋轉 45 度)與自身合成,就會產生一個四轉矩陣。

import numpy

hrt2 = 2**0.5 / 2
eighth_turn = numpy.array([
    [hrt2, hrt2],
    [-hrt2, hrt2]
])
eighth_turn @ eighth_turn
    array([[ 4.26642159e-17,  1.00000000e+00],
           [-1.00000000e+00, -4.26642159e-17]])

浮點數是不精確的,這比較難以看出。從結果中減去四轉矩陣,將其平方相加,然後取其平方根,這樣就比較容易檢查。

這是新運算符的一個優點:特別是在複雜的公式中,代碼看起來更像基礎數學:

almost_zero = ((eighth_turn @ eighth_turn) - numpy.array([[0, 1], [-1, 0]]))**2
round(numpy.sum(almost_zero) ** 0.5, 10)
    0.0

參數中的多個關鍵詞字典

Python 3.5 使得調用具有多個關鍵字-參數字典的函數成為可能。這意味著多個默認值的源可以與更清晰的代碼」互操作「。

例如,這裡有個可笑的關鍵字參數的函數:

def show_status(
    *,
    the_good=None,
    the_bad=None,
    the_ugly=None,
    fistful=None,
    dollars=None,
    more=None
):
    if the_good:
        print("Good", the_good)
    if the_bad:
        print("Bad", the_bad)
    if the_ugly:
        print("Ugly", the_ugly)
    if fistful:
        print("Fist", fistful)
    if dollars:
        print("Dollars", dollars)
    if more:
        print("More", more)

當你在應用中調用這個函數時,有些參數是硬編碼的:

defaults = dict(
    the_good="You dig",
    the_bad="I have to have respect",
    the_ugly="Shoot, don't talk",
)

從配置文件中讀取更多參數:

import json

others = json.loads("""
{
"fistful": "Get three coffins ready",
"dollars": "Remember me?",
"more": "It's a small world"
}
""")

你可以從兩個源一起調用這個函數,而不必構建一個中間字典:

show_status(**defaults, **others)
    Good You dig
    Bad I have to have respect
    Ugly Shoot, don't talk
    Fist Get three coffins ready
    Dollars Remember me?
    More It's a small world

os.scandir

os.scandir 函數是一種新的方法來遍歷目錄內容。它返回一個生成器,產生關於每個對象的豐富數據。例如,這裡有一種列印目錄清單的方法,在目錄的末尾跟著 /

for entry in os.scandir(".git"):
    print(entry.name + ("/" if entry.is_dir() else ""))
    refs/
    HEAD
    logs/
    index
    branches/
    config
    objects/
    description
    COMMIT_EDITMSG
    info/
    hooks/

歡迎來到 2015 年

Python 3.5 在六年前就已經發布了,但是在這個版本中首次出現的一些特性非常酷,而且沒有得到充分利用。如果你還沒使用,那麼將他們添加到你的工具箱中。

via: https://opensource.com/article/21/5/python-35-features

作者:Moshe Zadka 選題:lujun9972 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國