si100b,即我校的資訊科學與技術「導論」,在本學期成為了一門超級加速課程。
鑑於我校第一學期程設內容使用\(\rm python\),我覺得還是要來歸納一下。
另外吐槽一下我校的迴圈課件,為啥可以在概念b沒講之前就可以說概念a是概念b,太離譜了。
以下內容中,\(\rm invoke\)統一翻譯為「啟用」,\(\rm call\)統一翻譯為「呼叫」。
parameter n. 形式引數
argument n. 實際引數
\(\rm python\)中的很多態別宣告都只是給程式設計師看的,用於提高可讀性。實際型別將由定義決定。動態型別屬實壞文明\(\rm python\)中有非常豐富的例外結構,與此同時你也可以自定義例外。
sorted
是乙個排序方法(指\(\rm method\)),但你為啥要用完成時\(\cdots\cdots\)
.index()
是list
的通過值來索引第乙個下標的函式。
.format()
可以將字串中的{}
替換成format內給定的字串。多個{}
會按順序替換。
對於物件導向我還並沒有完全理解,不過靠搜尋引擎大概學會了一點:
總體上來說,物件導向程式設計就是並非從巨集觀上統一解決問題,而是將問題劃分為不同物件的行為組合。
此外,以下內容都在\(\rm python\)語境中,可能與其他語言有些許出入。
簡單來說就是建立乙個可以獨立出來用的玩意兒。如果例項物件對應的類增減了某種屬性,該物件也會對應增減某種屬性。
可以使用isinstance(obj,cls)
來判斷前者是否是後者的例項物件。另外,類(類物件)也是型別的例項物件。
變數是物件的屬性。在後文中,可能會為了語義的通順將「變數」和「屬性」混用。
例項變數是每乙個例項的獨立資料,比如
obj.var
的var
就是obj
這個例項物件的例項變數。
例項變數可以被動態新增至物件中,但是這個變數是只存在於這個物件中的獨立變數。
例項變數也可以被刪除(析構),刪除後其所屬的物件將不再具有該屬性。
\(\rm slides\)上推薦將所有的例項變數都在建構函式中初始化。
例項變數可以是函式。
與例項變數類似,它是類的獨立資料,所以它可以被類的所有例項物件共享。
它的特性與例項變數很相似,不再贅述。
\(\rm slides\)上推薦將所有的類變數都在類的定義開頭初始化。
需要注意的是,根據變數的定義,方法也是變數。
這\(\rm method\)的譯名大概和機翻沒有區別。
例項方法是操作例項資料的函式,所有例項方法的第乙個形參都會繫結例項物件,且識別符號無限制,但通常使用self
。
需要注意的是,例項方法無法直接用賦值的形式動態新增,這樣只會得到乙個例項變數,當然這個變數是函式,但它不是方法,因此你需要在呼叫函式的時候寫入第乙個引數來呼叫目標物件。
想要對某個物件動態新增乙個例項方法,可以
import types
然後使用types.methodtype(func,obj)
來將func
函式新增為obj
物件的例項方法。此時第乙個形參將自動呼叫當前例項物件。
例項方法也可以被刪除,刪除後其所屬的物件將不再具有該屬性。
\(\rm slides\)上推薦將所有的例項方法都在類的定義中定義。
與例項方法類似,類方法是操作類資料的函式,所有例項方法的第乙個形參都會繫結類物件,且識別符號無限制,但通常使用cls
。
定義類方法時,一般可以新增乙個名為「裝飾器」的語法糖來宣稱這個函式是類方法。
動態新增與刪除的方式與例項方法類似。
例項變數可以直接訪問。
例項方法可以直接obj.f(...)
訪問,也可以通過
cls.f(obj,...)
來訪問cls
類的obj
例項方法。
類變數可以直接訪問,也可以通過例項物件訪問。
類方法可以直接訪問,也可以通過類物件訪問,且二者都不需要寫入第乙個形參。
需要注意的是以上方法必須要滿足所有的變數都不相同。
\(\rm python\)中運用下劃線來定義特殊屬性,但這帶來了一些奇怪的問題。
_x
表示該變數的屬性是protected
,但在\(\rm python\)中,它僅能保護其不被
from module import
輸入。
__x__
表示該變數由系統定義。
__x
表示該變數的屬性是private
,即它只能被該類內的例項方法訪問且不能被繼承這個概念我以前接觸過所有就在沒寫之前用了。如果需要在類外訪問,可以用
obj._cls__x
接下來會介紹一些特殊的方法,它們擁有特殊的高亮。
這些方法是\(\rm python\)運算子過載的方式,它們可以在讓類定義它們自己的行為的同時「尊重」語法本身的運算子。
它們本身能夠自定義,但不應當被顯式呼叫,而是被編譯器呼叫。
\(\rm constructor/\)建構函式
即__init__(self,...)
,是所有的類都有的乙個隱式例項方法。
它會在建立類的新例項物件的時候自動被呼叫。
\(\rm destructor/\)析構函式
即__del__(self)
。
\(slides\)中寫到當物件的引用計數為\(0\)時物件被將銷毀,物件將被銷毀的時候會呼叫這個函式。但很顯然我並不知道「引用計數」是什麼。
\(\rm creator/\)翻譯沒找到
即__new__(cls,...)
。
它會將請求例項物件的類放在第乙個引數,其它引數會傳給__init__(self,...)
。
它會在建構函式啟用前返回新的例項物件,目前不清楚它的具體應用。
\(\rm iterator/\)迭代器
即__iter__(self)
。它可自定義迭代器的初始值。
\(\rm generator/\)翻譯沒找到
即__next__(self)
。它可自定義迭代器的變化量。
如果在類中自定義了\(\rm generator\),迭代器直接返回self
即可。
為了防止雙重迴圈迭代出現問題,建議將該方法寫在另乙個類中,迭代器直接返回anothercls(self)
即可。
\(\rm operators/\)運算子
加減乘除整除取模冪偏序位移邏輯,還有乙個物件的字串表示。
繼承是除了函式、類、模組外另一種重複運用**的方式。它的使用方法是
class subcls(basecls)
子類(派生類)與基類(父類)別問我為什麼要縫合兩種譯法的關係比較類似於\(\rm fork\),但它\(\rm fork\)的時候並不能完整的複製基類的所有內容。
所有屬性為public
和protected
的例項方法都能被繼承,但當且僅當子類沒有覆寫基類的建構函式,或子類的建構函式顯式啟用了基類的建構函式時,所有的例項變數才能被繼承。
需要注意的是,新的和覆寫後的方法無法訪問基類的private
變數,但繼承下來的可以。
真巧,oi筆記也寫到了傅利葉變換。其實是因為拖了好久還沒寫完此處的卷積其實是用乙個convolution kernel(卷積核)逐位置對影象進行對應位置乘法操作,並將值賦予中心點。
其中gaussian blur kernel(高斯模糊核)即二維正態分佈,可以自定義半徑和方差。
大概就是讓乙個圖的亮度均衡化,先將rgb轉換成yuv,再統計本質不同的亮度個數,用公式轉換每乙個畫素的亮度,隨後再轉換為rgb輸出。
音訊訊號的形成需要經過兩步:取樣和量化。
所謂取樣率,即每秒對音訊的取樣次數,經典的如44100hz。
取樣之後,由於音訊的響度也是連續的,因此也需要近似表示,即量化。
別問,問就是咕了。
SI100b期末複習
1.print函式 完整語法 print objects,sep end n file sys.stdout,flush false 解釋 2.escape character escape character meaning example print output don t do this d...
SI 9000 及阻抗匹配學習筆記(三)
置頂乙個我最新上傳的關於si9000的軟體及相關學習教程包 關於板材材質 介電常數等研究 fr 4 環氧玻璃布層壓板 根據使用的用途不同,行業一般稱為 fr 4 epoxy glass cloth 絕緣板 環氧板 環氧樹脂板 溴化 環氧樹脂 板 fr 4 玻璃纖維板 玻纖板 fr 4補強板 fpc補...
SI 9000 及阻抗匹配學習筆記(三)
fr 4環氧玻璃布層壓板,根據使用的用途不同,行業一般稱為 fr 4 epoxy glass cloth 絕緣板 環氧板 環氧樹脂板 溴化環氧樹脂板 fr 4 玻璃纖維板 玻纖板 fr 4補強板 fpc補強板 柔性線路板補強板 fr 4環氧樹脂板 阻燃絕緣板 fr 4積層板 環氧板 fr 4光板 f...