使用 Python 要注意的小細節

使用 Python 要注意的小細節 #

有些 Python 的行為可能跟其他語言或是直覺的想法會不太一樣。

整數除法是向下做 rounding #

x = 3
print(x // 2)      # 整數除法,向下做 rounding,印出 "1", C/C++ 會印出 "1"
print(x // -2)     # 整數除法,向下做 rounding,印出 "-2", C/C++ 會印出 "-1"

函式的預設參數必須是 immutable #

def append_list(val, l=[]):
    l.append(val)
    return l

list0 = append_list(10)
print(list0)

list1 = append_list(20)
print(list1)

直覺可能兩次 print 分別會印出 [10][20]。但其實會印出 [10][10 20]

Python 的預設參數只會在函式宣告的時候執行一次,所以第二次執行的時候 l 已經是 [10] 了。

建議的寫法:

def append_list(val, l=None):
    if l is None:
        l = []
    l.append(val)
    return l

Python bit shift operators (與 C/C++ 不同) #

Python 與 C/C++ 不同,C/C++ 的位元運算特別快,如 x << 1 會比 x * 2 快,但 Python 不會。

a = 100
%timeit a * 2
# 10000000 loops, best of 3: 34.8 ns per loop
%timeit a << 1
# 10000000 loops, best of 3: 54.4 ns per loop
%timeit a * 1024
# 10000000 loops, best of 3: 46.6 ns per loop
%timeit a << 10
# 10000000 loops, best of 3: 51.8 ns per loop

參考資料:

Guide to Python

comments powered by Disqus