Python 基本語法

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 yif x is false, then y, else x
x and yif x is false, then x, else y
not xif 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-elsefor 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"

參考資料:

Python 文件

cs231n Python tutorial

comments powered by Disqus