1. 程式人生 > >Python列表生成,集合,模組路徑問題,==和is,深淺拷貝,私有化,property的使用

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有同樣的名字