Python學習路上遇到的問題和疑惑點

寫在前面

經歷了秋招之後,發現SLAM找工作沒有實打實的項目真的很難,而且自己又換了方向,現在基本全得用Python,所以乘積梳理一番,在Python的簡單學習過程中需要注意的地方。什麼事情都不能一撮而就啊!加油

【Day007】 字符串和常用數據結構

1. 列表

f = [x for x in range(1, 10)]
print(f)
f = [x + y for x in 'ABCDE' for y in '1234567']
print(f)
# 用列表的生成表達式語法創建列表容器
# 用這種語法創建列表之後元素已經準備就緒所以需要耗費較多的內存空間
f = [x ** 2 for x in range(1, 1000)]
print(sys.getsizeof(f))  # 查看對象佔用內存的字節數
print(f)
# 請注意下面的代碼創建的不是一個列表而是一個生成器對象
# 通過生成器可以獲取到數據但它不佔用額外的空間存儲數據
# 每次需要數據的時候就通過內部的運算得到數據(需要花費額外的時間)
f = (x ** 2 for x in range(1, 1000))
print(sys.getsizeof(f))  # 相比生成式生成器不佔用存儲數據的空間
print(f)
for val in f:
    print(val)

上面的是生成器語法,當然除了那些之後還可以用yeild關鍵字, 藉此可以將普通函數 改造成生成器函數!(意味着不佔用額外的內存!,只有在需要的時候才佔用!)

2. 元組

首先要明白,元組其實和列表基本上差不多,唯一的 區別是:元組中的元素不能修改!
那麼不能修改的好處體現在什麼地方呢?
(1)多線程時候——線程安全元組中的元素是無法修改的,事實上我們在項目中尤其是多線程環境(後面會講到)中可能更喜歡使用的是那些不變對象(一方面因爲對象狀態不能修改,所以可以避免由此引起的不必要的程序錯誤,簡單的說就是一個不變的對象要比可變的對象更加容易維護;另一方面因爲沒有任何一個線程能夠修改不變對象的內部狀態,一個不變對象自動就是線程安全的,這樣就可以省掉處理同步化的開銷。一個不變對象可以方便的被共享訪問)。所以結論就是:如果不需要對元素進行添加、刪除、修改的時候,可以考慮使用元組,當然如果一個方法要返回多個值,使用元組也是不錯的選擇。
(2)節省內存,更快元組在創建時間和佔用的空間上面都優於列表。我們可以使用sys模塊的getsizeof函數來檢查存儲同樣的元素的元組和列表各自佔用了多少內存空間,這個很容易做到。我們也可以在ipython中使用魔法指令%timeit來分析創建同樣內容的元組和列表所花費的時間,下圖是我的macOS系統上測試的結果

3.類

(1) 關於類屬性,相當於的C++中的static一樣吧,我的個人感覺,在類之中,但是又在方法之外

(2)還要區別實例對象以及

關於Random.seed(1)

是爲了每次生成的隨機數保持一致而設置的,不然很多東西沒有辦法統一
比如如果不設置的話,教程給的代碼結果和實際操作的結果就不一致,沒有辦法判別

———————————————分割線——————————————————————
上面那樣知識點一樣的零零散散的方式對看代碼幫助不大,接下來還是整塊代碼來看比較合適吧,這就還是記錄小知識點,遇到了就記一下!

發佈了146 篇原創文章 · 獲贊 52 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章