天才教育網(wǎng)合作機構>

                                                                                        全國python學(xué)習中心

                                                                                        歡迎您!
                                                                                        朋友圈

                                                                                        400-850-8622

                                                                                        全國統一學(xué)習專(zhuān)線(xiàn) 9:00-21:00

                                                                                        位置:學(xué)校資訊 > python觀(guān)察者

                                                                                        python觀(guān)察者

                                                                                        日期:2023-03-31 14:59:10     瀏覽:263    來(lái)源:全國python學(xué)習中心
                                                                                        核心提示:Python設計模式 - 觀(guān)察者模式""" 觀(guān)察者模式:又叫發(fā)布-訂閱模式。 ????它定義了一種一對多的依賴(lài)關(guān)系,讓多個(gè)觀(guān)察者對象同時(shí)鑒定某一個(gè)主題對象。這個(gè)主題對象在狀態(tài)發(fā)生變化時(shí), 會(huì )通知所有的觀(guān)察者對象,

                                                                                        Python設計模式 - 觀(guān)察者模式

                                                                                        """

                                                                                        觀(guān)察者模式:又叫發(fā)布-訂閱模式。

                                                                                        ????它定義了一種一對多的依賴(lài)關(guān)系,讓多個(gè)觀(guān)察者對象同時(shí)鑒定某一個(gè)主題對象。這個(gè)主題對象在狀態(tài)發(fā)生變化時(shí),

                                                                                        會(huì )通知所有的觀(guān)察者對象,使它們能夠自動(dòng)更新自己。

                                                                                        觀(guān)察者模式所做的工作實(shí)際上就是解耦,根據“依賴(lài)倒轉原則”,讓耦合的雙方都依賴(lài)于抽象,而不是依賴(lài)于具體,

                                                                                        從而使得各自的變化都不會(huì )影響另一邊的變化。

                                                                                        實(shí)際場(chǎng)景中存在的問(wèn)題:現實(shí)中實(shí)際觀(guān)察者不一定有實(shí)現觀(guān)察者的通知回調方法。

                                                                                        解決之道:

                                                                                        1、為其封裝一個(gè)觀(guān)察類(lèi)出來(lái),實(shí)現相應的接口。

                                                                                        2、修改通知類(lèi),讓具體觀(guān)察者的Notify函數直接去調用相應的接口。

                                                                                        """

                                                                                        class?Subject(object):

                                                                                        ????def?__init__(self):

                                                                                        ????????self._observers?=?[]

                                                                                        ????def?attach(self,?observer):

                                                                                        ????????if?observer?not?in?self._observers:

                                                                                        ????????????self._observers.append(observer)

                                                                                        ????def?detach(self,?observer):

                                                                                        ????????try:

                                                                                        ????????????self._observers.remove(observer)

                                                                                        ????????except?:

                                                                                        ????????????pass

                                                                                        ????def?notify(self,?modifier=None):

                                                                                        ????????for?observer?in?self._observers:

                                                                                        ????????????if?modifier?!=?observer:

                                                                                        ????????????????observer.update(self)

                                                                                        #用法示例

                                                                                        class?Data(Subject):

                                                                                        ????def?__init__(self,?name=''):

                                                                                        ????????Subject.__init__(self)

                                                                                        ????????self.name?=?name

                                                                                        ????????self._data?=?0

                                                                                        ????@property

                                                                                        ????def?data(self):

                                                                                        ????????return?self._data

                                                                                        ????@data.setter

                                                                                        ????def?data(self,?value):

                                                                                        ????????self._data?=?value

                                                                                        ????????self.notify()

                                                                                        class?HexViewer:

                                                                                        ????def?update(self,?subject):

                                                                                        ????????print('十六進(jìn)制查看器:?主題?%s?有數據?0x%x'?%?(subject.name,?subject.data))

                                                                                        class?:

                                                                                        ????def?update(self,?subject):

                                                                                        ????????print('十進(jìn)制查看器:?主題?%s?有數據?%d'?%

                                                                                        ??????????????(subject.name,?subject.data))

                                                                                        #?用法示例...

                                                                                        def?main():

                                                                                        ????data1?=?Data('Data?1')

                                                                                        ????data2?=?Data('Data?2')

                                                                                        ????view1?=?()

                                                                                        ????view2?=?HexViewer()

                                                                                        ????data1.attach(view1)

                                                                                        ????data1.attach(view2)

                                                                                        ????data2.attach(view2)

                                                                                        ????data2.attach(view1)

                                                                                        ????print("設置數據1變量?=?10")

                                                                                        ????data1.data?=?10

                                                                                        ????print("設置數據2變量?=?15")

                                                                                        ????data2.data?=?15

                                                                                        ????print("設置數據1變量?=?3")

                                                                                        ????data1.data?=?3

                                                                                        ????print("設置數據2變量?=?5")

                                                                                        ????data2.data?=?5

                                                                                        ????print("從data1和data2分離HexViewer。")

                                                                                        ????data1.detach(view2)

                                                                                        ????data2.detach(view2)

                                                                                        ????print("設置數據1變量?=?10")

                                                                                        ????data1.data?=?10

                                                                                        ????print("設置數據2變量?=?15")

                                                                                        ????data2.data?=?15

                                                                                        if?__name__?==?'__main__':

                                                                                        ????main()

                                                                                        Python設計模式:觀(guān)察者模式


                                                                                        觀(guān)察者設計模式是最簡(jiǎn)單的行為模式之一。在觀(guān)察者設計模式中,對象(主題)維護了一個(gè)依賴(lài)(觀(guān)察者)列表,以便主題可以使用觀(guān)察者定義的任何方法通知所有觀(guān)察者它所發(fā)生的變化。

                                                                                        舉個(gè)生活中的小例子: 職員們趁老板不在,都在搞著(zhù)自己與工作無(wú)關(guān)的事情,同時(shí)觀(guān)察著(zhù)前臺小姐姐,前臺小姐姐在老板回來(lái)的時(shí)候,發(fā)布通知讓各同事回到工作狀態(tài)。




                                                                                        python中觀(guān)察者模式的作用

                                                                                        在現實(shí)國際中,許多方針并不是獨立存在的,其間一個(gè)方針的行為產(chǎn)生改動(dòng)可能會(huì )導致一個(gè)或許多個(gè)其他方針的行為也產(chǎn)生改動(dòng)。

                                                                                        這樣的例子還有許多,例如小偷與警察,貓和老鼠等

                                                                                        觀(guān)察者形式就如一個(gè)聊天室,當你需要收到聊天室的音訊時(shí),你就注冊成為聊天室的成員,當聊天室有信息更新時(shí),就會(huì )傳到你那去。當你不需要接收聊天室的信息時(shí),能夠注銷(xiāo)掉,退出聊天室。

                                                                                        2.形式的界說(shuō)與特點(diǎn)


                                                                                        降低了方針與觀(guān)察者之間的耦合聯(lián)系,兩者之間是抽象耦合聯(lián)系。

                                                                                        方針與觀(guān)察者之間建立了一套觸發(fā)機制。

                                                                                        4.它的主要缺陷如下


                                                                                        經(jīng)過(guò)前面的分析與應用實(shí)例可知觀(guān)察者形式適合以下幾種情形。

                                                                                          方針間存在一對多聯(lián)系,一個(gè)方針的狀況產(chǎn)生改動(dòng)會(huì )影響其他方針。

                                                                                          當一個(gè)抽象模型有兩個(gè)方面,其間一個(gè)方面依靠于另一方面時(shí),可將這二者封裝在獨立的方針中以使它們能夠各自獨立地改動(dòng)和復用。

                                                                                          有哪些 Python 經(jīng)典書(shū)籍

                                                                                          《深度學(xué)習入門(mén)》([ 日] 齋藤康毅)電子書(shū)網(wǎng)盤(pán)下載免費在線(xiàn)閱讀

                                                                                          資源鏈接:

                                                                                          鏈接: ?pwd=bhct 提取碼: bhct?

                                                                                          書(shū)名:深度學(xué)習入門(mén)

                                                                                          作者:[ 日] 齋藤康毅

                                                                                          譯者:陸宇杰

                                                                                          豆瓣評分:9.4

                                                                                          出版社:人民郵電出版社

                                                                                          出版年份:2021-7

                                                                                          頁(yè)數:285

                                                                                          內容簡(jiǎn)介:本書(shū)是深度學(xué)習真正意義上的入門(mén)書(shū),深入淺出地剖析了深度學(xué)習的原理和相關(guān)技術(shù)。書(shū)中使用Python3,盡量不依賴(lài)外部庫或工具,從基本的數學(xué)知識出發(fā),帶領(lǐng)讀者從零創(chuàng )建一個(gè)經(jīng)典的深度學(xué)習網(wǎng)絡(luò ),使讀者在此過(guò)程中逐步理解深度學(xué)習。書(shū)中不僅介紹了深度學(xué)習和神經(jīng)網(wǎng)絡(luò )的概念、特征等基礎知識,對誤差反向傳播法、卷積神經(jīng)網(wǎng)絡(luò )等也有深入講解,此外還介紹了深度學(xué)習相關(guān)的實(shí)用技巧,自動(dòng)駕駛、圖像生成、強化學(xué)習等方面的應用,以及為什么加深層可以提高識別精度等“為什么”的問(wèn)題。

                                                                                          作者簡(jiǎn)介:

                                                                                          齋藤康毅

                                                                                          東京工業(yè)*畢業(yè),并完成東京*研究生院課程?,F從事計算機視覺(jué)與機器學(xué)習相關(guān)的研究和開(kāi)發(fā)工作。是 Python、Python in Practice、The Elements of Computing Systems、Building Machine Learning Systems with Python的日文版譯者。

                                                                                          譯者簡(jiǎn)介:

                                                                                          陸宇杰

                                                                                          眾安科技NLP算法工程師。主要研究方向為自然語(yǔ)言處理及其應用,對圖像識別、機器學(xué)習、深度學(xué)習等領(lǐng)域有密切關(guān)注。Python愛(ài)好者。

                                                                                          121 11 個(gè)案例掌握 Python 數據可視化--星際探索

                                                                                          星空是無(wú)數人夢(mèng)寐以求想了解的一個(gè)領(lǐng)域,遠古的人們通過(guò)肉眼觀(guān)察星空,并制定了太陰歷,指導農業(yè)發(fā)展。隨著(zhù)現代科技發(fā)展,有了更先進(jìn)的設備進(jìn)行星空的探索。本實(shí)驗獲取了美國*航空航天局(NASA)官網(wǎng)發(fā)布的地外行星數據,研究及可視化了地外行星各參數、尋找到了一顆類(lèi)地行星并研究了天體參數的相關(guān)關(guān)系。
                                                                                          輸入并執行魔法命令 % inline, 設置全局字號,去除圖例邊框,去除右側和頂部坐標軸。

                                                                                          本數據集來(lái)自 NASA,行星發(fā)現是 NASA 的重要工作之一,本數據集搜集了 NASA 官網(wǎng)發(fā)布的 4296 顆行星的數據,本數據集字段包括:

                                                                                          導入數據并查看前 5 行。

                                                                                          截至 2021 年 10 月 22 日 全球共發(fā)現 4296 顆行星,按年聚合并繪制年度行星發(fā)現數,并在左上角繪制 NASA 的官方 LOGO 。

                                                                                          從運行結果可以看出,2005 年以前全球行星發(fā)現數是非常少的,經(jīng)計算總計 173 顆,2014 和 2016 是行星發(fā)現成果最多的年份,2016 年度發(fā)現行星 1505 顆。

                                                                                          對不同機構/項目/計劃進(jìn)行聚合并降序排列,繪制發(fā)現行星數目的前 20 。

                                                                                          2009 年至 2013 年,開(kāi)普勒太空望遠鏡成為有史以來(lái)最成功的系外行星發(fā)現者。在一片天空中至少找到了 1030 顆系外行星以及超過(guò) 4600 顆疑似行星。當機械故障剝奪了該探測器對于恒星的精確定位功能后,地球上的工程師們于 2014 年對其進(jìn)行了徹底改造,并以 K2 計劃命名,后者將在更短的時(shí)間內搜尋宇宙的另一片區域。

                                                                                          對發(fā)現行星的方式進(jìn)行聚合并降序排列,繪制各種方法發(fā)現行星的比例,由于排名靠后的幾種方式發(fā)現行星數較少,因此不顯示其標簽。

                                                                                          行星在宇宙中并不會(huì )發(fā)光,因此無(wú)法直接觀(guān)察,行星發(fā)現的方式多為間接方式。從輸出結果可以看出,發(fā)現行星主要有以下 3 種方式,其原理如下:

                                                                                          針對不同的行星質(zhì)量,繪制比其質(zhì)量大(或者?。┑男行潜壤?,由于行星質(zhì)量量綱分布跨度較大,因此采用對數坐標。

                                                                                          從輸出結果可以看出,在已發(fā)現的行星中,96.25% 行星的質(zhì)量大于地球。(圖中橫坐標小于 e 的紅色面積非常?。?/p>

                                                                                          通過(guò) sns.distplot 接口繪制全部行星的質(zhì)量分布圖。

                                                                                          從輸出結果可以看出,所有行星質(zhì)量分布呈雙峰分布,*個(gè)峰在 1.8 左右(此處用了對數單位,表示大約 6 個(gè)地球質(zhì)量),第二個(gè)峰在 6.2 左右(大概 493 個(gè)地球質(zhì)量)。

                                                                                          針對不同發(fā)現方式發(fā)現的行星,繪制各行星的公轉周期和質(zhì)量的關(guān)系。

                                                                                          從輸出結果可以看出:徑向速度(Radial Velocity)方法發(fā)現的行星在公轉周期和質(zhì)量上分布更寬,而凌日(Transit)似乎只能發(fā)現公轉周期相對較短的行星,這是因為兩種方法的原理差異造成的。對于公轉周期很長(cháng)的行星,其運行到恒星和觀(guān)察者之間的時(shí)間也較長(cháng),因此凌日發(fā)現此類(lèi)行星會(huì )相對較少。而徑向速度與其說(shuō)是在發(fā)現行星,不如說(shuō)是在觀(guān)察恒星,由于恒星自身發(fā)光,因此其觀(guān)察機會(huì )更多,發(fā)現各類(lèi)行星的可能性更大。

                                                                                          針對不同發(fā)現方式發(fā)現的行星,繪制各行星的距離和質(zhì)量的關(guān)系。

                                                                                          從輸出結果可以看出,凌日和徑向速度對距離較為敏感,遠距離的行星大多是通過(guò)凌日發(fā)現的,而近距離的行星大多數通過(guò)徑向速度發(fā)現的。原因是:近距離的行星其引力對恒星造成的擺動(dòng)更為明顯,因此更容易觀(guān)察;當距離較遠時(shí),引力作用變弱,擺動(dòng)效應減弱,因此很難借助此方法觀(guān)察到行星。同時(shí),可以觀(guān)察到當行星質(zhì)量更大時(shí),其距離分布相對較寬,這是因為雖然相對恒星的距離變長(cháng)了,但是由于行星質(zhì)量的增加,相對引力也同步增加,恒星擺動(dòng)效應會(huì )變得明顯。

                                                                                          將所有行星的質(zhì)量和半徑對數化處理,繪制其分布并擬合其分布。
                                                                                          由于:

                                                                                          因此,從原理上質(zhì)量對數與半徑對數應該是線(xiàn)性關(guān)系,且斜率為定值 3 ,截距的大小與密度相關(guān)。

                                                                                          從輸出結果可以看出:行星質(zhì)量和行星半徑在對數變換下,具有較好的線(xiàn)性關(guān)系。輸出 fix_xy 數值可知,其關(guān)系可以擬合出如下公式:

                                                                                          擬合出曲線(xiàn)對應的行星平均密度為:

                                                                                          同樣的方式繪制恒星質(zhì)量與半徑的關(guān)系。

                                                                                          從輸出結果可以看出,恒星與行星的規律不同,其質(zhì)量與半徑在對數下呈二次曲線(xiàn)關(guān)系,其關(guān)系符合以下公式:

                                                                                          同樣的方式研究恒星表面重力加速度與半徑的關(guān)系。

                                                                                          從輸出結果可以看出,恒星表面對數重力加速度與其對數半徑呈現較好的線(xiàn)性關(guān)系:

                                                                                          以上我們分別探索了各變量的分布和部分變量的相關(guān)關(guān)系,當數據較多時(shí),可以通過(guò) pd.plotting.scatter_matrix 接口,直接繪制各變量的分布和任意兩個(gè)變量的散點(diǎn)圖分布,對于數據的初步探索,該接口可以讓我們迅速對數據全貌有較為清晰的認識。

                                                                                          通過(guò)行星的半徑和質(zhì)量,恒星的半徑和質(zhì)量,以及行星的公轉周期等指標與地球的相似性,尋找諸多行星中最類(lèi)似地球的行星。

                                                                                          從輸出結果可以看出,在 0.6 附近的位置出現了一個(gè)*的圓圈,那就是我們找到的類(lèi)地行星 Kepler - 452 b ,讓我們了解一下這顆行星:

                                                                                          數據顯示,Kepler - 452 b 行星公轉周期為 384.84 天,半徑為 1.63 地球半徑,質(zhì)量為 3.29 地球質(zhì)量;它的恒星為 Kepler - 452 半徑為太陽(yáng)的 1.11 倍,質(zhì)量為 1.04 倍,恒星方面數據與太陽(yáng)相似度極高。
                                                                                          以下內容來(lái)自百度百科。 開(kāi)普勒452b(Kepler 452b) ,是美國*航空航天局(NASA)發(fā)現的外行星, 直徑是地球的 1.6 倍,地球相似指數( ESI )為 0.83,距離地球1400光年,位于為天鵝座。
                                                                                          2015 年 7 月 24 日 0:00,美國*航空航天局 NASA 舉辦媒體電話(huà)會(huì )議宣稱(chēng),他們在天鵝座發(fā)現了一顆與地球相似指數達到 0.98 的類(lèi)地行星開(kāi)普勒 - 452 b。這個(gè)類(lèi)地行星距離地球 1400 光年,繞著(zhù)一顆與太陽(yáng)非常相似的恒星運行。開(kāi)普勒 452 b 到恒星的距離,跟地球到太陽(yáng)的距離相同。NASA 稱(chēng),由于缺乏關(guān)鍵數據,現在不能說(shuō) Kepler - 452 b 究竟是不是“另外一個(gè)地球”,只能說(shuō)它是“迄今最接近另外一個(gè)地球”的系外行星。

                                                                                          在銀河系經(jīng)緯度坐標下繪制所有行星,并標記地球和 Kepler - 452 b 行星的位置。

                                                                                          類(lèi)地行星,是人類(lèi)寄希望移民的第二故鄉,但即使最近的 Kepler-452 b ,也與地球相聚 1400 光年。

                                                                                          以下通過(guò)行星的公轉周期和質(zhì)量?jì)蓚€(gè)特征將所有行星聚為兩類(lèi),即通過(guò)訓練獲得兩個(gè)簇心。
                                                                                          定義函數-計算距離
                                                                                          聚類(lèi)距離采用歐式距離:

                                                                                          定義函數-訓練簇心
                                                                                          訓練簇心的原理是:根據上一次的簇心計算所有點(diǎn)與所有簇心的距離,任一點(diǎn)的分類(lèi)以其距離最近的簇心確定。依此原理計算出所有點(diǎn)的分類(lèi)后,對每個(gè)分類(lèi)計算新的簇心。

                                                                                          定義函數預測分類(lèi)
                                                                                          根據訓練得到的簇心,預測輸入新的數據特征的分類(lèi)。

                                                                                          開(kāi)始訓練
                                                                                          隨機生成一個(gè)簇心,并訓練 15 次。

                                                                                          繪制聚類(lèi)結果
                                                                                          以*一次訓練得到的簇心為基礎,進(jìn)行行星的分類(lèi),并以等高面的形式繪制各類(lèi)的邊界。

                                                                                          從運行結果可以看出,所有行星被分成了兩類(lèi)。并通過(guò)上三角和下三角標注了每個(gè)類(lèi)別的簇心位置。
                                                                                          聚類(lèi)前
                                                                                          以下輸出了聚類(lèi)前原始數據繪制的圖像。

                                                                                          奇米在线7777在线精品|国产成人精品免费视|精品无码不卡一区二区三区|国内综合精品午夜久久资源|亚洲视频在线观看..

                                                                                                                                                                              本文由 全國python學(xué)習中心 整理發(fā)布。更多培訓課程,學(xué)習資訊,課程優(yōu)惠,課程開(kāi)班,學(xué)校地址等學(xué)校信息,可以留下你的聯(lián)系方式,讓課程老師跟你詳細解答:
                                                                                                                                                                              咨詢(xún)電話(huà):400-850-8622