Python随笔
-
三元操作符:
def reveal(): return 1 if 2 == 1 else 0 返回的值是0 def reveal(): return 1 if 1== 1 else 0 返回的值是1
-
元组:
封闭的列表,一旦定义,就不可改变(不能添加、删除或修改)
-
字典:
字典是可哈希的,因此里面的相同的值是被覆盖掉的,因为根据Key通过哈希函数计算出来的地址是相同的,所以相同的地址下的值会被覆盖。且通过哈希函数计算的地址不可能是按顺序排放的,所以集合强调是无序的。另外,list没有支持__hash__方法,所以不能将列表作为Key。
-
dict.setdufault(key,value):当 key不存在的时候,添加key并返回设置的默认值。当key存在的时候,并不会改变对应的value的值,并且返回这个值。
-
字典和变量的关系:给某个变量赋值时候,实际上是将变量和值以(__dict__)里的KEY和VALUE的形式存储在字典当中(参见__setattr__方法)。
-
1 list1=[1,2] 2 list2=[3,4] 3 dict1={'1':list1,'2':list2} 4 dict2 = dict1 # 浅拷贝: 引用对象 5 dict3 = dict1.copy() # 浅拷贝:拷贝第一级目录,但对二级目录还是引用 6 >>>dict1['1'][0]=3 7 >>>dict3['1'][0]#访问字典的第二级目录,发生了改变 8 3 9 >>>dict1['1']=[123] 10 >>>dict3['1']#访问第一级目录,没有发生改变 11 [1,2]
字典中copy()方法只是对第一级目录的拷贝,但是相对于第二级目录仍然是引用。
-
__getattr__()和__getattribute__()比较:
当访问实例对象的动态属性时,先调用__getattribute__方法,然后调用__getattr__方法。当访问不存在的实例对象的动态属性时,直接调用__getattr__方法。
-
查看函数相关用法:
- 使用dir()函数可以查询到该模块定义了哪些变量、函数和类。
- 但并不是所有这些名字对我们都有用,所以要过滤掉一些不需要的东西。你可以留意到这里有个__ all__属性,事实是它就是帮助我们完成一个过滤的操作。
- 第一,不是所以的模块都有__ all__属性;第二,如果一个模块设置了__ all__属性,那么使用“ from timeit import * ” 这样的形式导入命名空间,就只有__ all__属性这个列表里边的名字才会被导入。其他的名字不受影响。
- 另外还有一个叫作__ file__的属性,这个属性指明了该模块的源代码的位置。