Python概述:C++程式員眼中的Python

來源:互聯網
上載者:User

    在C++的程式員眼中,指令碼是個奇葩的邏輯。當然也可能我比較奇葩。不過從Lua走過來,python的理解也不那麼難。記錄一下剛學python要注意的東西,也算是個快速入門吧。如果你是從C++過來的,那你來對地方了。
避免運行指令碼閃過可以添加raw_input()。這相當於getline。
在命令列中可以直接鍵入filename.py來運行指令碼。 匯入模組用import moduleName。注意沒有.py。然後使用moduleName.attr即可使用相應的屬性。也可使用from module import attr命令,如此做則可直接使用屬性。第一次匯入模組時會運行指令碼,但第二次匯入不會。用reload可以重寫匯入模組,並運行模組。 互動模式下使用dir(moduleName)可以列出模組中的屬性名稱。
Python內建對象 數字:   **表示乘方。 import math匯入數學庫,可使用pi、sqrt等常用方法。
import random 匯入隨機數庫。     使用random.random()產生0-1的隨機數。也可random.choice([1,2,3,4]),在列表中選擇。      random.int(1,10),在1到10中產生隨機數。 字串:     字串是常量,不可更改,只能重新賦值。     len()計算長度。支援下標隨機訪問。     可以用s[-1]的方式表示倒數,其等效於s[len(s)-1]。     拆分字串用分區(slice)機制。          形式為X[I:J]。表示取出X中從I到J的內容,左開右閉。         如果I、J空出來,則分別表示0和len(X)。當然I、J可為負數。
    字串串連可以用'+',例如:S = S +'a'。此時S已經建立了一個新對象了。     字串尋找使用find(),返回位移量位置。     字串替換使用replace返回替換後的串。     字串的split使用split函數。分成的結果存入一個列表。     字串有基本操作的一些方法,如:upper、isalpha、rstrip等。     三引號可定義一段複雜文本。這些文字會被轉化為相應的串,包含定位字元等符號。同時也可用作注釋,相當於/***/

協助:     dir(變數)的方法可以列出對象的所有屬性和方法。具體方法的解釋可使用help命令。例如:help(S.index)。 模式比對:     import re。具體涉及Regex,再查吧。 列表:     列表能夠進行索引,切片等操作,像對字串一樣。例如用[:]、[-1]等。     列表與數組有些類似,但強大的多。列表沒有固定類型的約束,也能按需要增減大小,響應特定操作。有操作如:append、pop、'+'、sort、reverse。     列表解析通過在一個列表中運行一個運算式而建立一個新的列表。它編寫在方括弧中,並且有運算式和迴圈結構。有點像是sql語句。形如:         [func(value) for value in list [statment]]     這條語句會將每一個list中的元素賦值給value,檢查statment中條件是否符合,然後運行func(value),將其值建立為新列表中的一個項。例如:[row[1] for row in M if row[1]%2 == 0]。 字典:     表示方法為{key:value,key:value...}。     value可以是任何資料類型比如列表。記憶體是自動管理的,不需要釋放。     字典的輸出並不是有序的,我推測內部實現方法是樹。     固定順序輸出可先將鍵排序,再用for key in Keys: 的方法。或直接用sorted()方法。例如:for key in sorted(D): 。
可以通過.has_key判斷是否有對應的鍵。
元組: 不能更改,其它跟列表相似。
檔案: open(filename,weight)。預設許可權為'r',建立或開啟檔案。write()寫入檔案。read()讀出檔案內容。注意只能讀一次。 python中,按算符的優先順序確定計算順序。表的操作符中越靠後的優先順序越高。當然還是提倡使用括弧。
Floor除法。拋棄小數部分之後的除值,即%的商的部分。
python中長整形任意大。當長度超過int時,會自動轉換為長整形。
支援位操作。八位元以0開頭,16進位以0x開頭。oct(num)、hex(num)、int()可以對數字進行轉換。
指令碼動態對象實現邏輯: 每一個聲明出的變數名並沒有實際的類型,變數名是一個void指標,指向對象。另一方面,對象知道自己的類型,每個對象都包含了一個頭部資訊,標記了這個對象的類型。賦值有三個操作:建立一個對象、建立一個變數、將變數與對象串連。
     當變數名指向新對象時,舊對象記憶體就被回收(這要是能不慢都見鬼了)。
      變數不能指向變數。只能指向對象。因此當兩個變數之間賦值時,實際意思是要保持一致。他們實際上共用了對象。這樣就不會存在記憶體訪問的問題,代價就是效率低到爆。當原變數更改而不是對象更改時,會產生分歧。因此對於列表L2=L1,當L1中的值改變時,對象變了,變數並沒有變,所以L2的值也會變化,如果你不希望這樣可以簡單的使用分區技術:L2 = L1[:]。如果是字典的話,就要import copy,使用copy.copy()函數了。
    使用"=="操作符,測試兩個被引用的對象是否值相同。"is"操作符,檢查對象是否指向同一對象。注意小的數字和字串是在緩衝中被複用的。因此is判斷會為真。
大概就寫這些,以後可能在這裡再增加。有必要也會新寫一篇,歡迎大家關注。

本篇部落格出自阿修羅道,轉載請註明出處:http://blog.csdn.net/fansongy/article/details/8986698


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.