使用 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
參考資料: