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。

 

  1. dict.setdufault(key,value):当 key不存在的时候,添加key并返回设置的默认值。当key存在的时候,并不会改变对应的value的值,并且返回这个值。

  2. 字典和变量的关系:给某个变量赋值时候,实际上是将变量和值以(__dict__)里的KEY和VALUE的形式存储在字典当中(参见__setattr__方法)。

  3.  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__方法。

  • 查看函数相关用法:

  1. 使用dir()函数可以查询到该模块定义了哪些变量、函数和类。
  2. 但并不是所有这些名字对我们都有用,所以要过滤掉一些不需要的东西。你可以留意到这里有个__ all__属性,事实是它就是帮助我们完成一个过滤的操作。
  3. 第一,不是所以的模块都有__ all__属性;第二,如果一个模块设置了__ all__属性,那么使用“ from timeit import * ” 这样的形式导入命名空间,就只有__ all__属性这个列表里边的名字才会被导入。其他的名字不受影响。
  4. 另外还有一个叫作__ file__的属性,这个属性指明了该模块的源代码的位置。

 

posted @ 2020-02-19 21:21  Respirar  阅读(164)  评论(0编辑  收藏  举报