Python 基本語法 #
Truth Value 測試 #
所有 object 都可以在 if、while、布林運算等地方用來計算 True 或是 False。除非 object 定義了 __bool__() 的方法並且回傳 False 或定義了 __len()__ 並且回傳 0,否則都會視為 True
以下是幾個常見會是 False 的 built-in 型態:
- 常數 None 以及 False
- 各種數值型態的 0:0 (整數 0)、0.0 (浮點數 0)
- 空的 sequence 或 collection:’’、()、[]、[]、set()、range(0)
布林運算 #
運算 | 結果 |
---|---|
x or y | if x is false, then y, else x |
x and y | if x is false, then x, else y |
not x | if x is false, then True, else False |
and、or 是 short-circuiter operator,如果第一個 argument 就可以確定結果的話就不會算第二個 argument。在 x or y 的情況下,如果 x 為 True 就不會計算 y。
基本型態 #
Python 跟其他語言一樣,有 int, float, boolean, str。
x = 3
print(x) # 印出 3。 "#" 是單行註解
print(type(x)) # 印出 "<class 'int'>"
print(x + 1) # 加法,印出 "4"
print(x - 1) # 減法,印出 "2"
print(x * 2) # 乘法,印出 "6"
print(x // 2) # 整數除法,向下做 rounding,印出 "1"
print(x // -2) # 整數除法,向下做 rounding,印出 "-2"
print(x / 2) # 除法,轉型成 float,印出 "1.5"
print(type(x / 2)) # 印出 "<class 'float'>"
print(x ** 2) # 指數,印出 "9"
print(2 ** 100) # 印出 "1267650600228229401496703205376",不會溢位
x += 1
print(x) # 印出 "4"
x *= 2
print(x) # 印出 "8"
y = 2.5
print(type(y)) # 印出 "<class 'float'>"
print(y, y + 1, y * 2, y ** 2) # 印出 "2.5 3.5 5.0 6.25"
注意 Python 在整數除法負數部份行為跟 C/C++ 不同。並且沒有 x++、x– 等運算。
Python 一般情況下沒有 Integer overflow, 但是 float 會 overflow。注意: Numpy 等內部使用其他程式語言實作的套件依然會 overflow。
t = True
f = False
print(type(t)) # 印出 "<class 'bool'>"
print(t and f) # Logical AND; 印出 "False"
print(t or f) # Logical OR; 印出 "True"
print(not t) # Logical NOT; 印出 "False"
print(t != f) # 印出 "True"
hello, world = 'hello', "world" # 字串常數,可以用單引號或雙引號
print(hello) # 印出 "hello"
print(len(hello)) # 字串長度,印出 "5"
print(hello + ' ' + world) # 印出 "hello world"
print('%s %s %d' % (hello, world, 10)) # 印出 "hello world 10"
s = "HellO"
print(s.upper(), s.lower()) # 轉成大寫 / 小寫,印出 "HELLO hello"
print(s.replace('l', '(xx)')) # 子字串取代,印出 "he(xx)(xx)o"
print(' world '.strip()) # 刪掉最前面跟最後面的 whitespace characters
資料結構 #
Python 有內建 List (Array), Dictionary, Set, Tuple, Queue, Priority queue 等資料結構
# Python list, list 可以放入不同型態的變數
x = [0, 1, 4, 2, 3, 'xxxxx']
print(x[5], x[-1]) # 印出 "xxxxx xxxxx"
print(x[2:4]) # 印出 [4, 2]
y = [xx // 2 for xx in x if isinstance(xx, int)]
print(y) # list comprehension, 印出 "[0, 0, 2, 1, 1]"
# Python dictionary
d = {'a': 0, 'b': 1, 'c': 2}
print('a' in d, d['a'], d.get('aa', -1)) # 印出 "True 0 -1"
for key, value in d.items():
print(key, value) # 印出 "a, 0" "b, 1" "c, 2" 順序可能不固定(見下面補充)
Python 3.7 開始正式確定 dictionary 內的順序會跟插入順序一樣,3.6 以前版本不保證順序,需要用 OrderedDict。
# Python set: 無順序性保留唯一元素
x = {1, 2, 5, 6}
print(1 in x, 3 in x) # "True False"
x.add(3)
print(1 in x, 3 in x) # "True True"
# Python tuple: 不能改變 (immutable) 的 list
x = (1,)
y = (1,2)
d = {x: 1, y: 2}
print(1 in d, (1,) in d) # "False, True"
Queue:見 Python collections.deque
Priority Queue:見 Python heapq
控制流程 #
Python 有 if
-elif
-else
、for
loop、while
loop、break
for i in range(10):
print(i)
# 依序印出 0 到 9
for i in range(10):
if i % 2 == 0:
print(i)
elif i >= 5:
break
# 依序印出 "0" "2" "4"
函式 #
Python 函式使用 def
做為開頭定義函式,不用定義回傳值型態。如果沒有寫回傳值會回傳 None
。
def foo(a):
if a >= 0:
return 1
print(foo(0), foo(-1)) # 印出 "1 None"
參考資料: