今天不如來複習下Python基礎
01.python是什麼?
Python是一種解釋型語言。這就是說,與C語言和C的衍生語言不同,Python代碼在運行之前不需要編譯。其他解釋型語言還包括PHP和Ruby。
Python是動態類型語言,指的是你在聲明變數時,不需要說明變數的類型。你可以直接編寫類似x=111和x="Im a string"這樣的代碼,程序不會報錯。
Python非常適合面向對象的編程(OOP),因為它支持通過組合(composition)與繼承(inheritance)的方式定義類(class)。Python中沒有訪問說明符(access specifier,類似C++中的public和private),這麼設計的依據是「大家都是成年人了」。
在Python語言中,函數是第一類對象(first-class objects)。這指的是它們可以被指定給變數,函數既能返回函數類型,也可以接受函數作為輸入。類(class)也是第一類對象。
Python代碼編寫快,但是運行速度比編譯語言通常要慢。好在Python允許加入基於C語言編寫的擴展,因此我們能夠優化代碼,消除瓶頸,這點通常是可以實現的。numpy就是一個很好地例子,它的運行速度真的非常快,因為很多算術運算其實並不是通過Python實現的。
Python用途非常廣泛——網路應用,自動化,科學建模,大數據應用,等等。它也常被用作「膠水語言」,幫助其他語言和組件改善運行狀況。
Python讓困難的事情變得容易,因此程序員可以專註於演算法和數據結構的設計,而不用處理底層的細節。
1、python數據結構
Python中常見的數據結構可以統稱為容器(container)。序列(如列表和元組)、映射(如字典)以及集合(set)是三類主要的容器。
2、設計模式
設計模式(Design pattern)代表了最佳的實踐,通常被有經驗的面向對象的軟體開發人員所採用。設計模式是軟體開發人員在軟體開發過程中面臨的一般問題的解決方案。
(1)抽象工廠模式 為一個產品族提供了統一的創建介面。當需要這個產品族的某一系列的時候,可以從抽象工廠中選出相應的系列創建一個具體的工廠類。
(2)工廠方法模式 定義一個介面用於創建對象,但是讓子類決定初始化哪個類。工廠方法把一個類的初始化下放到子類。
(3)生成器模式 將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。
(4)單例模式 確保一個類只有一個實例,並提供對該實例的全局訪問。
class Singleton(object): ndef __new__(cls, *args, **kwargs): nif not hasattr(cls, _instance): ncls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs) nreturn cls._instancen
(5)適配器模式 將某個類的介面轉換成客戶端期望的另一個介面表示。適配器模式可以消除由於介面不匹配所造成的類兼容性問題。
(6)觀察者模式 在對象間定義一個一對多的聯繫性,由此當一個對象改變了狀態,所有其他相關的對象會被通知並且自動刷新。
3、棧和隊列
什麼是棧?
想像一摞被堆起來的書,這就是棧。這堆書的特點是,最後被堆進去的書,永遠在最上面。從這堆書裡面取一本書出來,取哪本書最方便?肯定是最上面那本。棧這種數據結構的特點就是如此:後進先出(Last In First Out - LIFO),即最後被堆進去的數據,最先被拿出來。
棧的python實現
class Stack(object): n# 初始化棧為空列表 ndef __init__(self): nself.items = [] n# 判斷棧是否為空,返回布爾值 ndef is_empty(self): n return self.items == [] n# 返回棧頂元素 ndef peek(self): nreturn self.items[len(self.items) - 1] n# 返回棧的大小 ndef size(self): n return len(self.items) n # 把新的元素堆進棧裡面(程序員喜歡把這個過程叫做壓棧,入棧,進棧……) ndef push(self, item): nself.items.append(item) n# 把棧頂元素丟出去(程序員喜歡把這個過程叫做出棧……) ndef pop(self, item): n return self.items.pop()n
Python裡面實現棧,就是把list包裝成一個類,再添加一些方法作為棧的基本操作。其他的數據結構在Python中也是以類似的方式實現的。
隊列Queue()
隊列是一種列表,不同的是隊列只能在隊尾插入元素,在隊首刪除元素。隊列用於存儲按順序排列的數據,先進先出,這點和棧不一樣,在棧中,最後入棧的元素反而被優先處理。
隊列是一種先進先出(First-In-First-Out,FIFO)的數據結構。隊列被用在很多地方,比如提交操作系統執行的一系列進程、列印任務池等,一些模擬系統用隊列來模擬銀行或雜貨店裡排隊的顧客。
隊列的兩種主要操作是:向隊列中插入新元素和刪除隊列中的元素。插入操作也叫做入隊,刪除操作也叫做出隊。入隊操作在隊尾插入新元素,出隊操作刪除隊頭的元素。
python的垃圾回收機制
通過「引用計數」(reference counting)來跟蹤和回收垃圾。
在引用計數的基礎上,還可以通過「標記-清除」(mark and sweep)解決容器對象可能產生的循環引用的問題。
通過「分代回收」(generation collection)以空間換取時間來進一步提高垃圾回收的效率。
組合和繼承
組合和繼承我們傾向於選擇組合,繼承體現的是一種專門化的概念而組合則是一種組裝的概念
python代碼中使用try except的優缺點
優點: 正常操作代碼的控制流不會和錯誤處理代碼混在一起. 當某種條件發生時, 它也允許控制流跳過多個框架;集中報錯。
缺點: 可能會導致讓人困惑的控制流. 調用庫時容易錯過錯誤情況。
SOCKET編程
Socket是進程通訊的一種方式,即調用這個網路庫的一些API函數實現分布在不同主機的相關進程之間的數據交換。
適用場合:socket是位於傳輸層的網路編程了,一般用於需要自己定義應用層的協議的應用程序。
socket的結構:socket的結構很簡單,只有三個元素,協議,埠號,IP地址。Socket=Ip address+ TCP/UDP + port
TCP和UDP的區別:(TCP)傳輸控制協議,是一種提供可靠數據傳輸的通用協議。(UDP)用戶數據報協議,是一個面向無連接的協議。採用該協議不需要兩個應用程序先建立連接。UDP協議不提供差錯恢復,不能提供數據重傳,因此該協議傳輸數據安全性差。
樂觀鎖和悲觀鎖
悲觀鎖:假定會發生並發衝突,屏蔽一切可能違反數據完整性的操作
樂觀鎖:假設不會發生並發衝突,只在提交操作時檢查是否違反數據完整性。
三次握手
(1)客戶端通過向伺服器端發送一個SYN來創建一個主動打開,作為三次握手的一部分。客戶端把這段連接的序號設定為隨機數 A。
(2)伺服器端應當為一個合法的SYN回送一個SYN/ACK。ACK 的確認碼應為 A+1,SYN/ACK 包本身又有一個隨機序號 B。
(3)最後,客戶端再發送一個ACK。當服務端受到這個ACK的時候,就完成了三路握手,並進入了連接創建狀態。此時包序號被設定為收到的確認號 A+1,而響應則為 B+1。
四次握手
TCP的連接的拆除需要發送四個包,因此稱為四次揮手(four-way handshake)。客戶端或伺服器均可主動發起揮手動作,在socket編程中,任何一方執行close()操作即可產生揮手操作。
(1)客戶端A發送一個FIN,用來關閉客戶A到伺服器B的數據傳送。
(2)伺服器B收到這個FIN,它發回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將佔用一個序號。
(3)伺服器B關閉與客戶端A的連接,發送一個FIN給客戶端A。
(4)客戶端A發回ACK報文確認,並將確認序號設置為收到序號加1。
HTTP和HTTPS
HTTPS(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。
超文本傳輸協議 (HTTP-Hypertext transfer protocol) 是一種詳細規定了瀏覽器和萬維網伺服器之間互相通信的規則,通過網際網路傳送萬維網文檔的數據傳送協議。
HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,要比http協議安全。
HTTPS和HTTP的區別主要如下:
(1)https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
(2)http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
(3)http和https使用的是完全不同的連接方式,用的埠也不一樣,前者是80,後者是443。
(4)http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。
python2和3一些區別
(1) __future__模塊
from __future__ import division 如果你希望在Python 2環境下寫的代碼也可以在Python 3.x中運行,那麼建議使用__future__模塊。
(2)print函數
Python 2中的print語句被Python 3中的print()函數取代,這意味著在Python 3中必須用括弧將需要輸出的對象括起來。
(3)整數除法
整型除法返回浮點數,要得到整型結果,在python3中使用//
Python2中: 3 / 2 = 1 Python3中:3 / 2 = 1.5n
(4)Unicode
Python 3中,終於有了Unicode(utf-8)字元串,以及兩個位元組類:bytes和bytearrays。
(5)Xrange
在Python 3中,range()的實現方式與xrange()函數相同,所以就不存在專用的xrange()(在Python 3中使用xrange()會觸發NameError)。
(6)異常處理
Python 3中的異常處理也發生了一點變化。在Python 3中必須使用「as」關鍵字。
try: ....... except NameError as err:n
Python2:
try: ....... except NameError, err:n
(7)Python 3改進了input()函數,這樣該函數就會總是將用戶的輸入存儲為str對象。在Python 2中,為了避免讀取非字元串類型會發生的一些危險行為,不得不使用raw_input()代替input()。
GIL含義、多線程、協程區別
進程有哪幾種基本狀態?
(1)就緒狀態 當進程已分配到除 CPU 以外的所有必要的資源,只要獲得處理機便可立即執行,這時的進程狀態稱為就緒狀態。
(2)執行狀態 當進程已獲得處理機,其程序正在處理機上執行,此時的進程狀態稱為執行狀態。
(3)阻塞狀態 正在執行的進程,由於等待某個事件發生而無法執行時,便放棄處理機而處於阻塞狀態。引起進程阻塞的事件可有多種,例如,等待 I/O 完成、申請緩衝區不能滿足、等待信件(信號)等。
GIL,即全局解釋器鎖(Global Interpreter Lock),是計算機程序設計語言解釋器用於同步線程的工具,使得任何時刻僅有一個線程在執行。CPython 中用GIL 來控制線程的執行,只有拿到 GIL 的線程才能執行。在 CPython 的運行中,有些內部資源不是線程安全的,所以需要有一個全局鎖來保護。這就造成了即使在多核CPU中,多線程也只是做著分時切換而已。意義只是每條語句宏觀上並發執行,並不能提升效率,只是並發,而沒有並行。
注意:GIL 只存在於CPython 中,其他 PyPy、IronPython、Jython 沒有這個問題。
進程:進程之間不共享任何狀態,進程的調度由操作系統完成,每個進程都有自己的獨立的內存空間,進程間的通訊主要是通過信號傳遞的方式來實現的,實現的方式有多種,信號量,管道,事件等,任何一種方式的通訊效率都需要通過內核,導致通訊效率比較低。由於是獨立的內存空間,上下文切換的時候需要先保存調用棧的信息,CPU 各寄存器的信息,虛擬內存,以及打開的相關句柄等信息,所以導致上下文進程間切換開銷很大,通訊麻煩。
線程:線程之間共享變數,解決了通訊麻煩的問題,但對變數的訪問需要鎖,線程的調度主要也是有操作系統完成,一個進程可以擁有多個線程,但是其中每個線程會共享父進程向操作系統申請資源,這個包括虛擬內存,文件等,由於是共享資源,所以創建線程所需要的系統資源佔用比進程小很多,相應的可創建的線程數量也變得相對多很多。線程時間的通訊除了可以使用進程之間通訊的方式之外還可以通過共享內存的方式進行通信,所以這個速度比通過內核要快很多。另外在調度方面也是由於內存是共享的,所以上下文切換的時候需要保存的東西就相對少一些,這樣一來上下文切換也變得高效
協程:協程的調度完全由用戶控制,一個線程可以有多個協程,用戶創建了幾個協程,然後每個協程都是循環按照指定的任務清單順序完成不同的任務,當任務被堵塞的時候執行下一個任務,當恢復的時候再回來執行這個任務,任務之間的切換隻需要保存每個任務的上下文內容,就像直接操作棧一樣的,這樣就完全沒有內核
裝飾器、生成器、迭代器
迭代器:迭代器是訪問集合元素的一種方式。迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。
特點:
1、訪問者不需要關心迭代器內部的結構,僅需通過next()方法不斷去取下一個內容2、不能隨機訪問集合中的某個值 ,只能從頭到尾依次訪問3、訪問到一半時不能往回退4、便於循環比較大的數據集合,節省內存生成器:一個函數調用時返回一個迭代器,那這個函數就叫做生成器(generator),如果函數中包含yield語法,那這個函數就會變成生成器。
這個yield的主要效果呢,就是可以使函數中斷,並保存中斷狀態,中斷後,代碼可以繼續往下執行,過一段時間還可以再重新調用這個函數,從上次yield的下一句開始執行。
裝飾器:裝飾器(Decorator)是python中最吸引人的特性,可以讓已有的函數不做任何改動的情況下增加功能。
02.資料庫
1、資料庫升序降序
資料庫 中使用order by語句進行排序,其中升序用asc,降序用desc。
如:select * from t order by 列a asc; -- 這是升序 asc可以省略不寫
select * from t order by 列a desc; -- 這是降序2、Mysql優化
大部分 MySQL 伺服器都有查詢緩存功能。這是提高性能的最有效的方法之一,這是由資料庫引擎私下處理的。當同一個查詢被多次執行,結果會直接從緩存里提取,這樣速度就很快。
獲取唯一行時使用 LIMIT 1
有時當你查表時,你已經知道你正在查找的結果只有一行。你可能正在獲取唯一記錄,或者你可能只是查詢是否存在滿足你的 WHERE 子句條件的記錄。
在這種情況下,將 LIMIT 1 添加到查詢條件中可以提高性能。這樣,資料庫引擎將在找到剛剛第一個記錄之後停止掃描記錄,而不是遍歷整個表或索引
避免使用 SELECT *
索引搜索欄位
3、Mysql的連接查詢有哪些
INNER JOIN(內連接,或等值連接):取得兩個表中存在連接匹配關係的記錄。
LEFT JOIN(左連接):取得左表(table1)完全記錄,即是右表(table2)並無對應匹配記錄。
RIGHT JOIN(右連接):與 LEFT JOIN 相反,取得右表(table2)完全記錄,即是左表(table1)並無匹配對應記錄。
4、mysql常用的引擎InnoDB
優點:InnoDB 支持事務,事務是一種高級的處理方式,如在一些列增刪改中只要哪個出錯還可以回滾還原;支持外鍵;
缺點:清空整個表時,InnoDB 是一行一行的刪除,效率非常慢。
5、redis基本類型
Redis 支持五種數據類型:string(字元串)、hash(哈希)、list(列表)、set(集合)及 zset(sorted set:有序集合)。
6、資料庫的隔離級別
(一)可讀取未確認(Read uncommitted)
寫事務阻止其他寫事務,避免了更新遺失。但是沒有阻止其他讀事務。
存在的問題:臟讀。即讀取到不正確的數據,因為另一個事務可能還沒提交最終數據,這個讀事務就讀取了中途的數據,這個數據可能是不正確的。
解決辦法就是下面的「可讀取確認」。
(二)可讀取確認(Read committed)
寫事務會阻止其他讀寫事務。讀事務不會阻止其他任何事務。
存在的問題:不可重複讀。即在一次事務之間,進行了兩次讀取,但是結果不一樣,可能第一次id為1的人叫「李三」,第二次讀id為1的人就叫了「李四」。因為讀取操作不會阻止其他事務。解決辦法就是下面的「可重複讀」。
(三)可重複讀(Repeatable read)
讀事務會阻止其他寫事務,但是不會阻止其他讀事務。
存在的問題:幻讀。可重複讀阻止的寫事務包括update和delete(只給存在的表加上了鎖),但是不包括insert(新行不存在,所以沒有辦法加鎖),所以一個事務第一次讀取可能讀取到了10條記錄,但是第二次可能讀取到11條,這就是幻讀。
解決辦法就是下面的「串列化」。
(四)可串列化(Serializable)
讀加共享鎖,寫加排他鎖。這樣讀取事務可以並發,但是讀寫,寫寫事務之間都是互斥的,基本上就是一個個執行事務,所以叫串列化。
7、資料庫的ACID
ACID,是指在可靠資料庫管理系統(DBMS)中,事務(transaction)所應該具有的四個特性:/原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)
8、同步非同步、阻塞非阻塞
同步和非同步關注的是消息通信機制 (synchronous communication/ asynchronous communication)。
所謂同步,就是在發出一個調用時,在沒有得到結果之前,該調用就不返回。
但是一旦調用返回,就得到返回值了。
換句話說,就是由調用者主動等待這個調用的結果。
而非同步則是相反,調用在發出之後,這個調用就直接返回了,所以沒有返回結果。換句話說,當一個非同步過程調用發出後,調用者不會立刻得到結果。而是在調用發出後,被調用者通過狀態、通知來通知調用者,或通過回調函數處理這個調用。
舉個通俗的例子:
你打電話問書店老闆有沒有《分散式系統》這本書,如果是同步通信機制,書店老闆會說,「你稍等,我查一下」,然後開始查啊查,等查好了(可能是 5 秒,也可能是一天)告訴你結果(返回結果)。
而非同步通信機制,書店老闆直接告訴你我查一下啊,查好了打電話給你,然後直接掛電話了(不返回結果)。然後查好了,他會主動打電話給你。在這裡老闆通過「回電」這種方式來回調。
阻塞和非阻塞關注的是程序在等待調用結果(消息,返回值)時的狀態.
阻塞調用是指調用結果返回之前,當前線程會被掛起。調用線程只有在得到結果之後才會返回。
非阻塞調用指在不能立刻得到結果之前,該調用不會阻塞當前線程。
03Web框架
1、CGI和WSGI
CGI是通用網關介面,是連接web伺服器和應用程序的介面,用戶通過CGI來獲取動態數據或文件等。
CGI程序是一個獨立的程序,它可以用幾乎所有語言來寫,包括perl,c,lua,python等等。
WSGI, Web Server Gateway Interface,是Python應用程序或框架和Web伺服器之間的一種介面,WSGI的其中一個目的就是讓用戶可以用統一的語言(Python)編寫前後端。
2、XSRF和XSS
CSRF(Cross-site request forgery)跨站請求偽造
XSS(Cross Site Scripting)跨站腳本攻擊
CSRF重點在請求,XSS重點在腳本
3、Diango的架構
Django 採用 MVT 的架構模式:M 為 Model 模型層,是對資料庫的數據的抽象與映射;V 為 View 視圖層,在此層中進行業務邏輯的處理,包括操作 model和為模版層提供數據;T 為 Template 模版層,負責前端頁面的展示。
4、diango對數據查詢結果排序怎麼做,降序怎麼做,查詢大於某個欄位怎麼做
排序使用 order_by(),如 Entry.objects.order_by(blog__name, headline);
降序需在排序的欄位名前加-,如 Entry.objects.order_by(-pub_date);
查詢欄位大於某個值:使用 filter(欄位名__gt=值),如
Entry.objects.filter(pubdate__gt=2006-01-01)5、Django處理request的流程
用戶通過瀏覽器請求一個頁面
請求到達Request Middlewares,中間件對request做一些預處理或者直接response請求
URLConf通過urls.py文件和請求的URL找到相應的View
View Middlewares被訪問,它同樣可以對request做一些處理或者直接返回response
調用View中的函數
View中的方法可以選擇性的通過Models訪問底層的數據
所有的Model-to-DB的交互都是通過manager完成的
如果需要,Views可以使用一個特殊的Context
Context被傳給Template用來生成頁面
Template使用Filters和Tags去渲染輸出
輸出被返回到ViewHTTPResponse被發送到Response Middlewares任何Response Middlewares都可以豐富response或者返回一個完全不同的responseResponse返回到瀏覽器,呈現給用戶
Middleware(中間件,包括request, view, exception, response),URLConf(url映射關係),Template(模板系統)
6、Diango的queryset使用
在進行數據查詢時,使用 all()、filter()、exclude()等會返回 Queryset,在對Queryset 進行過濾鏈式操作的時候返回的還是 Queryset,我們可以對返回的Queryset 進行排序、切片、過濾、去重等操作。
7、Django與Tornado的對比
Django 是一個大而全的框架,其設計初衷是為了快速開發,所以提供了豐富的套件供開發使用。其框架的所有業務與其內置的 ORM 緊密相關,還提供了自動化的 Admin 管理後台。
而 Tornado 不僅僅是 Web 框架,其還提供了一個高性能的 Web 伺服器,其設計初衷就是為了解決性能瓶頸問題,目的要打造一個高性能的開發框架。 Tornado 作為 Web 框架要比 Django 輕量的多,沒有提供豐富的套件,比如沒有ORM、管理後台、表單系統,甚至沒有 session 機制,但是提供了非同步機制、 WebSocket 等 Django 沒有的功能,屬於靈活的輕量級框架。
8、Torando的優缺點
Tornado 的優點是利用 epoll 機制實現了高性能,並以此提供了非同步機制,可以達到非同步非阻塞;框架輕量靈活;
其缺點是:Tornado 的運行是單進程的,一旦在處理一個請求時出現了阻塞,將影響整體性能,所有在 Tornado 的開發中要避免阻塞,出現阻塞的地方使用非同步,而對於接入的第三方庫或 SDK 往往並沒有提供對 Tornado 框架的非同步支持,所以使用第三方介面時需要我們重複造輪子,自己封裝針對於 Tornado 非同步的介面調用庫。
9、Tornado的工作原理
1、ioloop 是 tornado 運行的核心
2、ioloop 封裝了操作管理 epoll 的工作
3、當 ioloop 實例啟動時,ioloop 將伺服器監聽的 socket 添加到 epoll 容器中,然後循環等待 epoll 返回可處理的 socket
4、當有客戶端發起連接後,ioloop 從 epoll 容器中拿到了伺服器監聽的 socket,並調用伺服器實例處理該監聽 socket 的方法,接收連接請求,並將新的與客戶端對應的 socket 添加到 epoll 容器中,然後繼續循環等待 epoll 返回可處理的 socket
5、當客戶端發送過來請求數據後,ioloop 從 epoll 中拿到了接收數據的 socket,並調用伺服器實例處理該傳輸 socket 的方法,從 socket 中讀取出 http 報文數據,解析後調用 Application 的實例,進行路由分發,實例化具體的 RequestHandler,執行其中的具體 http 方法,生成響應數據並打包成 http 報文寫入到緩衝區中。
6、當與客戶端對應的 socket 可寫時,ioloop 從 epoll 中拿到了對應可寫的 socket,將緩衝區中對應的響應報文數據寫入到 socket 中傳回給客戶端,完成請求處理。
7、epoll 每次只返回給 ioloop 可以處理的 socket,然後 ioloop 對拿到的 socket 依次進行處理,有效充分地利用了 cpu 時間,進而達到提升支持高並發的能力。
10、apache和nginx的區別
nginx 相對 apache 的優點:
1、輕量級,同樣起web 服務,比apache 佔用更少的內存及資源
2、抗並發,nginx 處理請求是非同步非阻塞的,支持更多的並發連接,而apache 則是阻塞型的,在高並發下nginx 能保持低資源低消耗高性能
3、配置簡潔
4、高度模塊化的設計,編寫模塊相對簡單
5、社區活躍
apache 相對nginx 的優點:
1、rewrite ,比nginx 的rewrite 強大
2、模塊超多,基本想到的都可以找到
3、少bug ,nginx 的bug 相對較多
4、超穩定
11、SOAP
SOAP(原為Simple Object Access Protocol的首字母縮寫,即簡單對象訪問協議)是交換數據的一種協議規範,使用在計算機網路Web服務(web service)中,交換帶結構信息。SOAP為了簡化網頁伺服器(Web Server)從XML資料庫中提取數據時,節省去格式化頁面時間,以及不同應用程序之間按照HTTP通信協議,遵從XML格式執行資料互換,使其抽象於語言實現、平台和硬體。
歡迎關注我們的微信公眾號「人工智慧LeadAI」,ID:atleadai
推薦閱讀:
※PyQt5系列教程(10):老闆,這個打一下
※TensorFlow 如何入門?
※Hello Word —— 使用Python讀寫Office文檔之一
※最簡潔,最高效的python入門指南!
※Python · 神經網路(五)· Cost & Optimizer
TAG:Python |