Python 語言的版本目前還常見有 2.x 及 3.x 兩種,除了維護舊系統相容性的顧慮外,建議新建系統及初學者都使用 3.x 版。 本課程內容規劃使用 Python 3,程式碼則在 3.6 版本的環境下測試。
Python官方的文件就是很好的學習及參考手冊,可以online查詢,也可以下載來offline使用。
Python是直譯式的高階程式語言,可以想成是直譯器每讀一行程式碼就執行一行,不像C++需要經過編譯器讀過全部的程式碼,翻譯成機器碼(binary code)後才能給電腦執行。安裝完Python的開發環境後,可以透過不同的介面執行以下的初學範例:
用print
在視窗或console畫面上輸出文字,在python中用單引號或雙引號包住的都當作是文字資料。
print('Hello Python!')
Hello Python!
# 所有井字符號 "#" 後的字碼都當成註解(comment)
# Python預設使用Unicode(utf-8),處理中文字也沒問題。
print("拍神你好")
拍神你好
算數運算比小算盤、工程計算機還好用,精度更高,輸入更直覺,數字再大也不是問題。
python語法的算術運算符號:
+
加-
減*
乘**
次方/
除(結果為浮點數)//
除法取商(結果如同取floor,捨棄小數點後的數字)%
除法取餘數41.5 // (2 + 5 * 3)
2.0
2**1000
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
比較運算子:
<
小於>
大於==
等於<=
小於或等於>=
大於或等於!=
不等於比較結果為 True 或 False。兩個比較的表述式可以連續串接,等同於"而且"的邏輯,兩個比較結果都必須同時成立。例如: 1 < 3 > 2
串接了兩個比較的陳述,即 1 < 3 而且 3 > 2
。可以串接的表述式個數沒有限制,只是如果串得太長了,程式碼會比較不好閱讀、比較難除錯。
2**1000 / 2**900 == 2**100
True
除了一些數學常數外,程式碼中通常很少看得到用固定數值作運算,會像用代數來解決應用問題一樣,運用符號來代表問題中未知的或可變動的量,稱為變數(variable)。 將值用等號 "=" 指定給變數名稱。假設某物體初始位置x0,在初速v0及加速度a的條件下,計算移動的物體在時間t時的位置, xt=x0+v0t+12at2。
x0 = 1
v0 = 10
a = 9.81
t = 200
x0 + v0 * t + 0.5 * a * t**2
198201.0
若想查看目前執行階段使用了哪些變數、函數庫或模組等,只要是ipython或jupyter系列的介面,都可以輸入 %whos
命令查看。
%whos
Variable Type Data/Info ----------------------------- a float 9.81 t int 200 v0 int 10 x0 int 1
最後的輸出會存在一個特殊的變數名稱 _
中。
print(_)
198201.0
ipython 或 jupyter console 從一開始就是設計成便利的互動式人機介面,所以很多開發的工作,不用離開ipython系列的介面就可以完成。還有很多方便的指令,可以輸入 %lsmagic
查詢。事實上,在大部分的系統中預設都是 Automagic
,所以這些指令的前綴符號 %
是可以省略的。常用的操作:
?
: ipython功能簡介物件?
: 該物件的說明。例如:x0?
會顯示變數x0的資料型態(int)的說明,%whos?
會顯示%whos指令的說明。help(物件)
: 顯示該物件的python說明。%quickref
: 指令快速查詢。%whos
: 顯示目前執行階段使用中的變數和物件%store
: 儲存變數以供跨越不同執行階段持續使用(重新開啟後仍然存在)%env
: 顯示環境變數。%set_env
: 設定環境變數%pwd
: 顯示目前工作目錄。%cd
: 切換目前工作目錄到指定位置%ls
: 列出檔案和目錄%copy
: 複製檔案或目錄%mkdir
: 新增目錄%rmdir
: 移除目錄!<系統指令>
: 執行目前作業系統下支援的指令%run <檔案.py>
: 在 ipython 中執行 script 檔%matplotlib
: 設定 matplotlib 如何支援繪圖顯示%%writefile filename
: 將此 cell 以下內容寫入 filename
檔案完整的 magic 命令可在官方說明文件查詢。
netifs = !python --version
netifs
['Python 3.6.8 :: Anaconda custom (64-bit)']
Python除了本身內建不少常用的函式外,官方的開發也制定了相當多功能的標準函式庫(Python Standard Library),但針對五花八門的各種不同應用仍嫌不足,仍然需要許多非官方開發的函式庫套件來支援。例如:
numpy
numpy
及 scipy
套件pandas
、scikit-learn
、和tensorflow
matplotlib
,寫過 Matlab 的人對 matplotlib 的語法會很容易上手函式庫有一些不同的包裝方式,我們通稱為模組(module),在使用模組之前,要先做 import
讓 python 直譯器知道不是內建的函式名字要去哪裡找。常用的語法如下:
import module
import module1, module2
import module as name
from module import name
from module import name1, name2
from module import *
from module import name as alias_name
以繪製圖表為例,以下示範將 Matlab 常用的範例函數的向量場畫出來。 z=xe−x2−y2
# 指定將圖表內嵌顯示在jupyter介面中
%matplotlib inline
# 試一下:模組名稱打三個字,然後按鍵盤TAB鍵
import numpy as np
import matplotlib.pyplot as plt
y, x = np.mgrid[-2:2.1:0.2,-2:2.1:0.2]
z = x * np.exp(-x ** 2 - y ** 2)
dy, dx = np.gradient(z)
plt.quiver(x, y, dx, dy, z)
plt.contour(x, y, z, 10)
<matplotlib.contour.QuadContourSet at 0x1ce5ed0c860>