1. 程式人生 > 其它 >Python學習筆記:一些出乎意料的程式碼

Python學習筆記:一些出乎意料的程式碼

1.只執行1次?

# 只執行一次?
for i in range(4):
    print(i)
    i = 10
# 答案:執行4次,輸出0123
# 原理:Python迴圈方式,迭代器range(4)提前被解包並賦值目標列表

2.Hash

# Hash
some_dict = {}
some_dict[5.5] = "Ruby"
some_dict[5.0] = "JavaScript"
some_dict[5] = "Python"
print(some_dict) # {5.5: 'Ruby', 5.0: 'Python'}
# 原理:Python字典檢查鍵值是否相等、比較雜湊值

3.最後返回

# 最後返回
def func_ss():
    try:
        return 'from_try'
    finally:
        return 'from_finally'
func_ss() # 'from_finally'
# 原理:try finally語句中try執行return、break、continue後,finally依舊會執行

4.非也非也

# 非也非也
print('Something' is not None) # True
print('Something' is (not None)) # False
# 原理:is not是一個單獨的二元運算子 與分別使用is not不同

5.從有到無

# 從有到無
some_list = [1, 2, 3]
some_dict = {
    "key_1": 1,
    "key_2": 2,
    "key_3": 3
}
some_list = some_list.append(4) # None
some_dict = some_dict.update({'key_4':4}) # None
# 原理:大多數修改序列、對映物件的方法
# 比如list.append、dict.update、list.sort等,都是原地修改並返回None

6.同人不同命

# 同人不同命
a = [1, 2, 3, 4]
b = a
a = a + [5, 6, 7, 8]
print(a) # [1, 2, 3, 4, 5, 6, 7, 8]
print(b) # [1, 2, 3, 4]

a = [1, 2, 3, 4]
b = a
a += [5, 6, 7, 8]
print(a) # [1, 2, 3, 4, 5, 6, 7, 8]
print(b) # [1, 2, 3, 4, 5, 6, 7, 8]
# 原理:生成新列表 並引用
# += 實際使用extend函式 仍指向同一列表

參考連結:那些讓人直呼臥槽的Python程式碼!