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 @   Hider1214  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示