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

  • 相关阅读:
    函数嵌套,层级嵌套函数就是闭包,包就是一层的意思,闭就是封装的意思封装的变量
    高阶函数
    装饰器=高阶函数+函数嵌套+闭包
    生产者和消费者模型
    【HDOJ】Power Stations
    【HDOJ】5046 Airport
    【HDOJ】3957 Street Fighter
    【HDOJ】2295 Radar
    【HDOJ】3909 Sudoku
    【POJ】3076 Sudoku
  • 原文地址:https://www.cnblogs.com/hider/p/16020745.html
Copyright © 2020-2023  润新知