1沛硅、字典是可變對象巫糙,執(zhí)行 l.append(a)的操作中是把字典 a 的引用傳到列表 l 中,當后
續(xù)操作修改 a[‘num’]的值的時候查坪,l 中的值也會跟著改變,相當于淺拷貝宁炫。
2偿曙、Python2 中 range 和 xrange 的區(qū)別
兩者用法相同,不同的是 range 返回的結果是一個列表淋淀,而 xrange 的結果是一個生成器遥昧,前者是直接開辟一塊內(nèi)存空間來保存列表,后者是邊循環(huán)邊使用朵纷,只有使用時才會開辟內(nèi)存空間炭臭,所以當列表很長時,使用 xrange 性能要比 range 好
3袍辞、print 方法默認調(diào)用 sys.stdout.write 方法鞋仍,即往控制臺打印字符串
4、在 Python3 中搅吁,input()獲取用戶輸入威创,不論用戶輸入的是什么落午,獲取到的都是字符串類型的。在 Python2 中有 raw_input()和 input(), raw_input()和 Python3 中的 input()作用是一樣的肚豺,input()輸入的是什么數(shù)據(jù)類型的溃斋,獲取到的就是什么數(shù)據(jù)類型的
5、4G 內(nèi)存怎么讀取一個 5G 的數(shù)據(jù)吸申?
方法一:可以通過生成器梗劫,分多次讀取,每次讀取數(shù)量相對少的數(shù)據(jù)(比如 500MB)進行處理截碴,處理結束后在讀取后面的 500MB 的數(shù)據(jù)梳侨。
方法二:可以通過 linux 命令 split 切割成小文件,然后再對數(shù)據(jù)進行處理日丹,此方法效率比較高走哺。可以按照行數(shù)切割哲虾,可以按照文件大小切割丙躏。
【注】yield用來生成生成器,后面用for循環(huán)遍歷的時候每次返回yield暫存的data值妒牙。
6彼哼、在except中return后仍然會執(zhí)行finally中的代碼
except: #捕獲所有異常
except: <異常名>: #捕獲指定異常
except:<異常名 1, 異常名 2> : 捕獲異常 1 或者異常 2
except:<異常名>,<數(shù)據(jù)>:捕獲指定異常及其附加的數(shù)據(jù)
except:<異常名 1,異常名 2>:<數(shù)據(jù)>:捕獲異常名 1 或者異常名 2,及附加的數(shù)據(jù)
7对妄、淺拷貝和深拷貝
淺拷貝會創(chuàng)建新對象湘今,其內(nèi)容非原對象本身的引用,而是原對象內(nèi)第一層對象的引用剪菱。
淺拷貝有三種形式:切片操作摩瞎、工廠函數(shù)、copy 模塊中的 copy 函數(shù)孝常。
比如上述的列表 a旗们;
切片操作:b = a[:] 或者 b = [x for x in a];
工廠函數(shù):b = list(a)构灸;
copy 函數(shù):b = copy.copy(a)上渴;
【注】我們修改原列表中嵌套的列表的時候,淺拷貝出來的對象也會發(fā)生變化喜颁。這是因為稠氮,淺拷貝執(zhí)行的時候只拷貝了一層,拷貝的是對象的引用半开。當嵌套的列表值發(fā)生變化的時候隔披,引用不變。兒對于列表中的其他不可變對象來說寂拆,列表的重新賦值即改變了原列表的引用奢米。不會影響新的列表抓韩。
深拷貝(deep copy):深拷貝只有一種形式,copy 模塊中的 deepcopy()函數(shù)鬓长。深拷貝和淺拷貝對應谒拴,深拷貝拷貝了對象的所有元素,包括多層嵌套的元素涉波。因此彪薛,它的時間和空間開銷要高。同樣的對列表 a怠蹂,如果使用 b = copy.deepcopy(a)善延,再修改列表 b 將不會影響到列表 a,即使嵌套的列表具有更深的層次城侧,也不會產(chǎn)生任何影響易遣,因為深拷貝拷貝出來的對象根本就是一個全新的對象,不再與原來的對象有任何的關聯(lián)嫌佑。
拷貝的注意點:對于非容器類型豆茫,如數(shù)字、字符屋摇,以及其他的“原子”類型揩魂,沒有拷貝一說,產(chǎn)生的都是原對象的引用炮温。如果元組變量值包含原子類型對象火脉,即使采用了深拷貝,也只能得到淺拷貝柒啤。
8倦挂、__init__ 和__new__的區(qū)別
init 在對象創(chuàng)建后,對對象進行初始化担巩。
new 是在對象創(chuàng)建之前創(chuàng)建一個對象方援,并將該對象返回
9、隨機數(shù)
random.random():生成一個 0-1 之間的隨機浮點數(shù)涛癌;
random.uniform(a, b):生成[a,b]之間的浮點數(shù)犯戏;
random.randint(a, b):生成[a,b]之間的整數(shù);
random.randrange(a, b, step):在指定的集合[a,b)中拳话,以 step 為基數(shù)隨機取一個數(shù)先匪;
random.choice(sequence):從特定序列中隨機取一個元素,這里的序列可以是字符串假颇,列表胚鸯,元組等
random.shuffle(alist)? :打亂一個序列
10、
os.path 主要是用于對系統(tǒng)路徑文件的操作笨鸡。
sys.path 主要是對 Python 解釋器的系統(tǒng)環(huán)境參數(shù)的操作(動態(tài)的改變 Python 解釋器搜索路徑)