zoukankan      html  css  js  c++  java
  • python碎片笔记2

    TypeError: unhashable type: 'list'

    字典的键必须可以哈希,list 不使用 hash 值进行索引,故其对所存储元素没有可哈希的要求:set、dict使用hash值进行索引,也即其要求欲存储的元素有可哈希的要求。Python不支持dict的key为list或dict类型,因为list和dict类型是unhashable(不可哈希)的。

    什么叫做可哈希呢?

    一个对象的哈希值如果在其生命周期内绝不改变,就被成为可哈希(它具有hash()方法),并可以同其他对象进行比较(它需要具有eq()方法),可哈希对象必须具有相同的哈希值比较结果才会相同。

    一个对象的哈希值在生命周期内不改变,就被称为可哈希,可哈希性使得对象能够作为字典键或集合成员使用,因为这些数据结构要在内部使用哈希值。

    可变容器(例如列表和字典)都不可哈希。所以,只有可哈希对象才能作为字典的键

    如何去判断一个对象的哈希值是否改变:

    1、所有python中不可变内置对象都是可哈希的

    2、可变容器(列表,字典)不可哈希

    3、用户定义类的实例对象默认可哈希

    4、相等的两个对象一定拥有相等的哈希值,反之却不成立

    列表生成表达式可以双循环嵌套

    a=[[1,2][3,4][5,6]]
    
    for i in a:
        for j in i:
            print(j)
    
    b=[j for i in a for j in i]
    
    print(b)

    lambda函数

    lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式,lambda是一个表达式而不是一个语句。它能够出现在python语法不允许def出现的地方,作为表达式,lambda返回一个值(即一个新的函数)

    lambda表达式之间可以嵌套使用

    其可作为一个参数使用

    将lambda复制给一个变量,通过这个变量调用该lambda

    add=lambda: x,y:x+y
    
    add(1,2)

    将lambda函数赋值给其他函数,从而将其他函数用该lambda函数替换

    例如,为了把标准库time中的函数sleep的功能屏蔽,我们可以在程序初始化时调用:

    time.sleep=lambda x:None

    如此,后续代码中调用sleep将不会执行原有功能

    可作为闭包:

    lambda函数作为其他函数的返回值,返回给调用者

    return lambda

    此时,lambda实际上为定义在某函数内部的嵌套函数内部函数,相应的,包含嵌套函数的函数称为外部函数,内部函数能够访问外部函数的局部变量,这个特性称为闭包

    def my_add(n)
        return lambda x:x+n
    
    add_3=my_add(3)
    add_3(7)

    最后输出为10,此处lambda即是一个闭包,闭包先粗浅的认为是函数内的函数,在全局作用域范围内,add_3(7)可以正常执行且返回值为10,是因为再my_add局部作用域中,变量n的值在闭包的作用使得它在全局作用域也可以被访问。

    使用常规函数形式如下:

    def my_add(n):
        def wrapper(x):
            return x+n
        return wrapper
    
    add_5 = my_add(5)
    add_5(2)

    Explicit is better than implicit(明了胜于晦涩)

    字典相关补充:

    字典确定的键值未定义为list时使用append报错,可使用try解决

    字典不可以跨步定义,即:

    dic['a']['1']=[]

    在key值a还未定义时无法定义key值1

    string相关:

    split不会影响原字符串

    暂时收工,工作进度问题继续django工程开发

  • 相关阅读:
    event.keycode大全(javascript) (转)
    Javascript 中的 字符串对象 toUpperCase() toString() charAt() indexOf() lastIndexOf() replace() search() substring()
    Javascript 中的 var
    Javascript 中的 Array
    super() (1)
    Javascript 中的事件
    JavaScript验证函数大全 (转)
    javascript数字验证(转)
    Javascript 中 null 与 undefined关系
    Javascript 中的 for ... in
  • 原文地址:https://www.cnblogs.com/threeidiots/p/14835999.html
Copyright © 2011-2022 走看看