跨語言學習的基本思路及python的基礎學習

  筆者是C#出身,大學四年主修C#,工作三年也是C#語言開發。但在學校裏其他的語言也有相應的課程,eg:Java,Php,C++都學過,當然只是學了皮毛(大學嘛,你懂得),嚴格來說未必入門,但這些語言的代碼閱讀倒是不成問題,畢竟觸類旁通嘛,有道是“一法通,萬法明”,多學學其他的也沒壞處。

  近期被臨時借調到其他項目組,由於新項目用的是Python,本人呢又沒有python開發經驗(之前只是知道有這門語言),工期呢兩週多吧,簡單來說就是時間緊,任務重,而且開發環境完全陌生,於是就得快速學會使用一門新語言。如何跨語言學習就成了一個必須要考慮的問題。下文開始講述一下我的思路僅供借鑑。

  第一:環境搭建。這個事情放第一位,如果環境就有問題,以後的開發基本上就是空談。一般不建議去網上看教程,這時候直接問老員工,或者讓他幫忙。(時間緊嘛,如果時間充裕可以自己嘗試搭建開發環境)

     第二:熟悉ide。首先,儘量使用項目組推薦的ide,避免使用其他ide導致問題出現時,無人解答。當然如果是有高人直接用文本編輯器開發的情況(主要出現在解釋型語言或者腳本語言開發),可以忽略這一條。所謂熟悉ide,一方面熟悉界面,哪一部分是什麼功能,另一方面熟悉快捷鍵,提高開發效率。常用快捷鍵其實沒有多少,只選擇自己常用的快捷鍵強化訓練。

     第三:學習語言。語言學習有速成的,有慢成的。時間允許的情況,建議慢慢來,將基礎打紮實。時間不允許的時候,以工作爲導向,需要什麼就學什麼。怎麼速成,我也摸索到一點經驗。

     1.語言的基本類型。因爲是跨語言學習,自己腦海中一定有其他語言的干擾,這個不要在意,你需要在意的是基本類型之間的差異,個人建議有對比的學習。將差異記錄下來,不要只是大腦強記,勤翻閱筆記,這是個好習慣。

     2.語言的基本語法。大多數的編程語言的編程邏輯只有3個,判斷、循環和跳轉。你需要速記的就是這三種邏輯的所有寫法及變體。以下以C#爲例:

     判斷一般是if-else或者是switch-case,條件判斷和值判斷。

     循環一般是for、foreach、while、do-while,已知或者指定長度的循環和便利循環。

     跳轉一般是break、continue、return、goto(goto是禁忌用法,除非很清晰邏輯運行,否則不建議使用),循環中跳轉和值返回。

     3.常用操作。常用操作一般是字符串處理,類型轉化及格式化數據,各數據類型的常用操作方法,文件、文件夾及路徑操作,讀寫流操作,數據庫操作,網絡通信和多線程。熟悉相應的操作方法及方法重載。

     經過以上幾個步驟的學習強化,短期內看懂一門新語言是沒有問題的。當然開發不僅是要看懂,更重要的是寫出來,這就需要自己動手了,誰也幫不了你,必須自己動手寫,大量的寫。只有這樣纔有可能短期速成。其實以上經驗也適用於零基礎的學習,只是困難會幾何倍的上漲,而且也不建議零基礎的人選擇速成。另外,少看一些教程,直接去找語言相關的api,這是最直接粗暴的辦法,因爲很多教程是非原創的,也沒有人實踐過,甚至都不適合你的環境,這些都是有可能減緩你的學習進度。

-------------------------------------------------------分隔符:以下是個人的python基本學習的筆記,僅供參考------------------------------------------------------------------

數據類型:

數據類型有五種標準類型:
Numbers(數字)String(字符串)List(列表)Tuple(元組)Dictionary(字典)
數字可以定義複數,a+bj ,a-bj(a,b分別爲複數的實部,虛部;J可以大寫也可以小寫)

list列表,跟C#裏的列表不同在於,C#中列表是同一種類型的,python的不是。
eg:
list = [123, '1354', "78e", 12.5],[32,254,"wewr",22.5];
print list;//全部輸出
print list[0][1:3];//返回一個列表,第一個列表的第二個元素後到第四個元素之前的元素,注意是前閉後開的區間 ['1354', "78e"] (3-1)個元素
print list[1][0];//返回一個具體值
print list[1][1:];//返回一個列表,第二個列表從第二個元素開始的所有元素。

字符串可以當做list操作,規則跟list一樣
元組用小括號,list用中括號,字典用大括號。元組不支持更新,list支持更新
字典是鍵值對,一維的。list是多維的。
字典是無序的,列表是有序的

常用方法

range(start,stop,step=1)返回一個列表, 從start到stop(不包含),累加step ,常用於for循環 eg: range(2,5,2) 結果 [2,4]
字符串操作:
1.strobj.count(搜索字符串,起始位置,結束位置)返回檢索字符串在原字符串中出現的次數
2.strobj.endswith(搜索字符串) 返回是否以搜索字符串結尾,不推薦使用其重載方法。
3.strobj.find(搜索字符串) 返回搜索字符串的索引,如果不存在返回-1
4.strobj.index(搜索字符串)返回搜索字符串的索引,如果不存在拋出異常
5.strobj.replace(被替換,替換爲)
6.strobj.strip([字符串])默認去掉字符串兩端的空格,指定參數後,去掉指定字符串

列表操作:
1.list.count(obj)返回obj在list中出現的次數。
2.list.__len__() 返回list的長度
3.list.extend(seq) 向列表中插入多個元素。用一個列表填充另一個列表
4.list.insert(index,obj) 向列表指定位置插入對象
5.list.pop([index]) 默認返回最後一個元素(類似棧的先進後出),並刪除該元素。指定索引時返回指定對象。
6.list.sort([func])按照默認方法排序或者按提供的方法排序。


文件操作:
1.open(“文件名”,“操作方式”)。返回一個文件對象。文件默認是當前路徑下,可以指定路徑注意路徑的書寫方式,操作方式常用“r+”,“w+”,“a+”,都是讀寫操作只是光標初始位置不同。
2.fileobj.close() 關閉當前文件對象。當一個文件對象被重新指定給另一個文件時,會關閉之前的文件,但是建議使用close。
3.fileobj.write() 可以將二進制數據或者文字寫入。對應的要使用二進制方式打開文件。此方法不會自動在字符串的結尾處添加換行符。
4.fileobj.read([字節數]) 無參數時將所有內容讀出。指定長度時將讀出指定長度的內容,並將光標停留在該位置。
5.fileobj.tell()獲取文件內光標的位置
6.os.rename(當前名稱,新名稱) 重命名文件 需要引入os
7.os.remove(文件名) 刪除文件 需要引入os
8.fileobj.next() 獲取下一行的內容
9.fileobj.readline([字節數]) 讀取整行,包括“\r\n” ,如果指定字節數,返回光標位置的指定長度的內容

文件夾操作:
需要引入os模塊
1.os.mkdir() 在當前目錄下創建文件夾
2.os.chdir(路徑)可以跳轉到指定路徑 注意指定路徑的方式 “\”在字符串中需要轉義
3.os.getcwd() 顯示當前工作路徑 os.getcwdu() 顯示當前工作路徑的unicode對象
4.os.rmdir()刪除文件夾。刪除文件時必須現將其中內容全部清空。
5.os.chmod(目錄,權限) 慎用 修改目錄權限
6.os.listdir(path)返回一個列表,顯示指定目錄下文件夾和文件
7.os.removedirs(path) 遞歸刪除目錄

正則表達式:
需要引入re模塊
1.re.match(表達式,內容[,匹配模式]) 嘗試從字符串的起始位置匹配,匹配成功返回一個匹配對象,若匹配不到返回None;
2.re.search(表達式,內容[,匹配模式]) 掃描整個字符串,返回第一個匹配的結果,如果沒有匹配到就返回None
3.re.sub(表達式,替換爲字符串,原始字符串[,替換次數,匹配模式])

網絡通信Socket:
需要引入socket模塊
服務器端
1.socket() 創建套接字對象
2.sobj.bind(主機名,端口號)綁定地址套接字
3.sobj.listen(最大連接數) 開始監聽端口,並指定最大監聽數量
4.sobj.accept() 阻塞式接受tcp請求
客戶端
5.sobj.connect(主機名,端口號) 連接主機
通用方法
6.sobj.recv(緩衝區大小) 接收數據 ,以字符串返回
7.sobj.send(字符串) 發送字符串
8.sobj.close() 關閉套接字

多線程:
需要引入thread模塊
thread.start_new_thread(線程函數,參數元組[,可選參數]) 開始新線程
需要引入threading模塊
threading.currentThread() 返回當前線程變量
threading.enumerate(): 返回一個包含正在運行的線程的list。正在運行指線程啓動後、結束前,不包括啓動前和終止後的線程
threading.activeCount(): 返回正在運行的線程數量,與len(threading.enumerate())有相同的結果。
Thread類 繼承Thread類,需要建議重寫_init_(),run()方法 ,繼承中子類不會主動去調用父類構造函數
run() 線程活動的方法
start() 啓動線程
isAlive() 返回線程是否活動
getName()
setName()
join([超時時間]) 等待線程中止(調用中止、正常退出或者拋出異常) 。如果設置超時時間,如果在超時時間之內沒有阻塞線程就不再阻塞該線程。實際中,在前一個線程未完成的情況下,下一個線程從前一個線程的結束時間起再設置一段超時時間。
線程同步: threading.lock() 創建一個線程鎖對象
tlock.acquire() 加鎖
tlock.release()解鎖
將只允許一個線程運行的代碼放在鎖對象的兩個方法之間。

Json:
需要引入json模塊
json.dumps(對象) 將對象轉換成json字符串
json.loads(字符串) 將json字符串轉成pytho的數據類型 從輸出結果看是一個字典

 

python的面向對象

python在設計之初就包含了面向對象的思想。
類,方法,繼承,對象,實例化這些常見的概念在python中也存在。但是值得注意的是類變量(或者叫屬性)與常見的面嚮對象語言中的屬性變量不太一樣。
python中的類變量最大的特點就是在整個實例化中是公用的,因此不建議在類中定義變量。類似與C#中的靜態公共變量。在類的內部使用時,用類名加點來調用。
構造函數是特定的__init__(),與C#或者Java的構造方法是不同的。
方法的聲明實現也不同,def關鍵字表示聲明方法,方法必須有一個額外的參數,第一個參數名稱默認是self,代表類的實例。在調用的時候卻不需要對該參數傳值。self不是關鍵字,換成 runoob 也是可以正常執行的
創建實例不使用new來實例化對象,直接類名加上括號就可以,類似方法的調用。
可以使用del關鍵字來回收對象,也可以使用析構函數__del__

繼承,python是多繼承的,聲明時使用小括號將父類包裹。python的繼承特點:
1.子類不會自動調用父類的構造函數,需要在子類的構造函數中手動調用。
2.python根據類型來調用方法,如果在子類中不存在,纔會去試着調用父類的方法。主要是針對方法重寫。

私有字段和私有方法都是以兩個下劃線開頭,只能在內部訪問。

-------------------------------------------------------ps------------------------------------------------------------

     泛泛之談,不值一哂,只爲拋磚引玉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章