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代码!

posted @ 2022-03-18 10:48  Hider1214  阅读(55)  评论(0)    收藏  举报