- Python物理建模初學者指南(第2版)
- (美)杰西·M.金德 (美)菲利普·納爾遜
- 970字
- 2025-05-19 16:00:23
1.4.2 算術運算和預定義函數
Python包含基本的算術運算符,例如+
、-
、*
(乘)、/
(除)和**
(冪運算)。
Python使用雙星號**
表示求一個數的冪。
例如,a**2
表示“a
的平方”(符號a^2
在其他一些數學軟件中表示平方,但在Python中具有完全不同的含義)。
與標準數學符號不同,Python中的乘法必須包含乘法符號。嘗試輸入以下命令:
(2)(3) a = 2; a(3) 3a 3 a
每個命令都會產生一條錯誤消息。但是,它們都不會生成這樣的消息:“你忘了一個'*'
!”根據Python使用的求值規則,這些表達式沒有意義。Python不知道你試圖表達什么,所以它無法確切地告訴你出了什么問題。不妨研究這些錯誤消息;你可能會再次遇到它們。附錄D描述了這些錯誤消息和其他常見的錯誤。
算術運算的優先級(排序)與常識相符。
使用圓括號可以改變運算符的優先級。
與數學教科書不同,在Python中,只能使用圓括號改變優先級排序。方括號和花括號則用于其他目的。前面已經看到,圓括號還有另一種含義:將函數的參數括起來。此外,圓括號還有第三種含義:指定元組。Python根據上下文來確定要使用哪種含義。
例如,如果要使用數字,你可能會輸入
1/2*np.pi
(原生Python不知道π的值,但NumPy知道)。試試看。
問題出在哪里?為什么?插入括號可以修復表達式的問題。稍后我們會遇到其他類型的運算符,如比較和邏輯運算符,它們也有一定的優先級排序。你可能并不想記住所有運算符的優先級,不過,你可以自由地使用括號來準確地表達你的意圖。
為了熟悉Python的算術運算,試回答下面兩個語句解決了什么樣的著名數學問題,并檢查Python能否正確處理:
a, b, c = 1, -1, -2 (-b + np.sqrt(b**2 - 4*a*c))/(2*a)
前面曾介紹過,np.sqrt
是一個函數的名稱,Python在啟動時是無法識別它的,但一旦導入NumPy模塊后,它就變得可用了。當Python遇到第二行中的表達式時,它會執行以下操作。
(1)通過用數值替換變量并執行算術運算來計算np.sqrt
函數的參數的值,參數是指函數名后圓括號內的所有內容(參數本身可能包含函數)。
(2)中斷表達式的計算,并執行一段名為np.sqrt
的代碼,將步驟(1)中找到的結果傳遞給該代碼。
(3)用np.sqrt
返回的值替換表達式。
(4)按照正常程序完成表達式的求值。
如何知道哪些函數可用?參見1.2.3小節:在IPython控制臺提示符下輸入dir(np)
和dir(__builtins__)
。
Python和NumPy預先定義了若干符號。這些符號不需要任何參數或括號。試試np.pi
(常數π)、np.e
(自然對數的底數)和1j
(虛數單位)。另外,NumPy還提供標準的三角函數,但在使用時要注意:
在np.sin
、np.cos
和np.tan
等三角函數中,參數的角度都采用弧度。