Python列表生成,集合,模块路径问题,==和is,深浅拷贝,私有化,property的使用

列表生成式:      range(3)  --->[0,1,2]         b=[i for i in range(10) if i%2==0]   只有在range(10)中且i%2==0  才能给了前面的i

集合set     {11,22,33}  和字典类似  都用大括号 但里面不是键值对  且元素不重复

a=[11,22,33,11,22]      b=set(a)  a=list(b)  实现了一个列表去重 

sys.path.append("../")  模块的导入路径中添加当前路径

修改了某个模块后需要重新导入  from imp import *   reload(test)  重新导入加载test模块

a=[11,22,33]

b=[11,22,33]

a==b   #True  判断内容

a is b   #False   判断id(a)和id(b)

深拷贝和浅拷贝

指向相同的地址即为浅拷贝

import copy

c=copy.deepcopy(a)  拷贝a里面所有的值到另一个空间  即指向的空间不同为深拷贝    深度拷贝是递归深度拷贝的,不管如何引用都可以拷贝出来作为单独的空间中

c=copy.copy(a)  只拷贝指向a的地址到c中 ,且c和a是不同地址  但内容指向的是同一个地址  即只能拷贝第一层 (注意:如果a是不可变类型,那么a 和c是同一个地址)

_x单前置下划线,私有化属性或方法  from  somemodule import *禁止导入,类对象和子类可以访问

__num私有属性其实也是可以访问的  需要加上类名   本质上它变成了 _Test__num 可以通过t._Test__num调用

私有变量一般有get set方法  getNum()  setNum()

property:

num=property(getNum,setNum)

这样设置时候  可以通过直接赋值的方法给__num私有变量赋值   t.num=200  通过property给__num赋值200  Python解释器内部自动调用get set方法

@property

  def money(self.value):

        return self.__money

@money.setter

def money(self.value):  #money是提供给外界用的名字

          self.__money=value

property的另一种用法  getter和setter有同样的名字

猜你喜欢

转载自blog.csdn.net/IT_NEU_Lee/article/details/83855308