1. 程式人生 > >Python第一步

Python第一步

1.Python是一種解釋性語言,沒有了編譯環節。

  • py和pyc  所以是有沒有編譯?

2.像Perl一樣遵循GPL(GNU General Public License)協議。

3.指令碼化:可以嵌入到C/C++程式。

4.可擴充套件:需要一段執行很快的程式碼,或者不願公開的程式碼,可以使用C或C++完成那部分程式,再用Python呼叫。

注:關於Python的更細節的東西,在不斷理解的基礎上深化。


【規範】

Python 識別符號

  • 單下劃線開頭 _foo 的代表不能直接訪問的類屬性,需通過類提供的介面進行訪問,不能用 from xxx import * 而匯入;
  • 雙下劃線開頭的 __foo 代表類的私有成員;
  • 以雙下劃線開頭和結尾的 __foo__ 代表 Python 裡特殊方法專用的標識,如 __init__() 代表類的建構函式。

Python空行

  • 函式之間或類的方法之間用空行分隔,表示一段新的程式碼的開始。類和函式入口之間也用一行空行分隔,以突出函式入口的開始。
  • 空行並不是Python語法的一部分。

【變數型別】

  • Python 中的變數賦值不需要型別宣告
  • 每個變數在記憶體中建立,都包括變數的標識,名稱和資料這些資訊。
  • 每個變數在使用前都必須賦值,變數賦值以後該變數才會被建立。
  • Python允許你同時為多個變數賦值(a=b=c=1;a,b,c=1,2,'s')

標準資料型別

  • Numbers(數字)
  • String(字串)
  • List(列表)
  • Tuple(元組)
  • Dictionary(字典)

Python數字

  • 不可改變的資料型別,這意味著改變數字資料型別會分配一個新的物件。
  • int
  • long(也可8進位制和16進位制)(末尾加L或者l),- 無限大小的整數
  • float
  • complex(用 a + bj,或者 complex(a,b) 表示, 複數的實部 a 和虛部 b 都是浮點型。)

Python字串

  • 字串或串(String)是由數字、字母、下劃線組成的一串字元。
  • 2種取值順序:(從左到右索引預設0開始的,最大範圍是字串長度少1;從右到左索引預設-1開始的,最大範圍是字串開頭)
  • 獲取一段子字串: [頭下標:尾下標]
  • 加號(+)是字串連線運算子,星號(*)是重複操作。(r/R)原始字串
  • Python不支援單字元型別,單字元在 Python 中也是作為一個字串使用。
  • Python2.6 開始,新增了一種格式化字串的函式 str.format(),它增強了字串格式化的功能。

Python列表

  • [,,,,]
  • 列表中值的切割也可以用到變數 [頭下標:尾下標]
  • 字串相當於一個字元列表
  • 列表的資料項不需要具有相同的型別
    • 可以使用 del 語句來刪除列表的元素( del list1[2] )
    • 使用append()方法來新增列表項(list.append('ss'));
    • list.pop([index=-1])
      移除列表中的一個元素(預設最後一個元素),並且返回該元素的值
    • list.remove(obj)
      移除列表中某個值的第一個匹配項
  • 列表對 + 和 * 的操作符與字串相似。
  • a[:] 是建立 a 的一個副本,這樣我們在程式碼中對 a[:] 進行操作後,就不會改變 a 的值了。而若直接對 a 進行操作,那麼 a 的值會收到一些操作的影響

Python元組

  • 元組用"()"標識。內部元素用逗號隔開。
  • 元組不能二次賦值,相當於只讀列表。
  • tuple(seq)  將列表轉換為元組。
  • 元組的一級元素不可被修改增加刪除但可以修改二級後的。
如修改元祖中列表,字典等內容:
  • 元組中只包含一個元素時,需要在元素後面新增逗號:
tup1 = (50,)
Python 字典
  • 列表是有序的物件集合,字典是無序的物件集合。
  • 字典是可變容器模型,且可儲存任意型別物件
  • 字典當中的元素是通過鍵來存取的,而不是通過偏移存取。
  • 用"{ }"標識。字典由索引(key)和它對應的值value組成。
d = {key1 : value1, key2 : value2 }
  • 鍵一般是唯一的,如果重複最後的一個鍵值對會替換前面的,值不需要唯一。
  • 值可以取任何資料型別,但鍵必須是不可變的,如字串,數字或元組。
  • 刪除相關

del dict['Name']; # 刪除鍵是'Name'的條目

dict.clear();     # 清空詞典所有條目

del dict ;        # 刪除詞典


Python資料型別轉換

  • 資料型別的轉換,你只需要將資料型別作為函式名即可。

【Python運算子】

  • Python 中沒有 ++ 或 -- 自運算子

Python算術運算子

  • **  冪
  • // 取整除,返回商的整數部分(  9//2 輸出結果 4 , 9.0//2.0 輸出結果 4.0  )
  • 注意:Python2.x 裡,整數除整數,只能得出整數。如果要得到小數部分,把其中一個數改成浮點數即可。

Python邏輯運算子(非0即為真)

  • x and y:布林"與" - 如果 x 為 False,x and y 返回 False,否則它返回 y 的計算值。
  • x or y: 布林"或" - 如果 x 是非 0,它返回 x 的值,否則它返回 y 的計算值。
  • not x:  布林"非" - 如果 x 為 True,返回 False 。如果 x 為 False,它返回 True。

Python成員運算子

  • in:如果在指定的序列中找到值返回 True,否則返回 False。
  • not in 如果在指定的序列中沒有找到值返回 True,否則返回 False。

Python身份運算子

  • is :是判斷兩個識別符號是不是引用自一個物件【x is y, 類似 id(x) == id(y)】(注: id() 函式用於獲取物件記憶體地址。)
  • is not :是判斷兩個識別符號是不是引用自不同物件
  • :is 用於判斷兩個變數引用物件是否為同一個, == 用於判斷引用變數的值是否相等。
  • 【注】為了提高記憶體利用效率對於一些簡單的物件,如一些數值較小的int物件,python採取重用物件記憶體的辦法

【Python 基本分支結構】

Python 條件語句
  • Python程式語言指定任何非0和非空(null)值為true,0 或者 null為false。
  •  python 並不支援 switch 語句,所以多個條件判斷,只能用 elif 來實現。

迴圈使用 else 語句

  • 在 python 中,while … else 在迴圈條件為 false 時執行 else 語句塊(不是通過break跳出而中斷的)
  • 類似 if 語句的語法,如果你的 while 迴圈體中只有一條語句,你可以將該語句與while寫在同一行中
  • ——(while (flag): print 'Given flag is really true!')
  • for … else 表示這樣的意思,for 中的語句和普通的沒有區別,else 中的語句會在迴圈正常執行完(即 for 不是通過 break 跳出而中斷的)的情況下執行,while … else 也是一樣。

【函式】

  • 在 python 中,型別屬於物件,變數是沒有型別的:

a=[1,2,3]

a="Runoob"

以上程式碼中,[1,2,3] 是 List 型別,"Runoob" 是 String 型別,而變數 a 是沒有型別,她僅僅是一個物件的引用(一個指標),可以是 List 型別物件,也可以指向 String 型別物件。

  • 引數傳遞:傳不可變物件和傳可變物件。

傳不可變物件:如 整數、字串、元組。如fun(a),傳遞的只是a的值,沒有影響a物件本身。比如在 fun(a)內部修改 a 的值,只是修改另一個複製的物件,不會影響 a 本身。

傳可變物件:如 列表,字典。如 fun(la),則是將 la 真正的傳過去,修改後fun外部的la也會受影響

  • 引數

必備引數:須以正確的順序傳入函式。呼叫時的數量必須和宣告時的一樣。

printme("再次呼叫同一函式");

關鍵字引數:允許函式呼叫時引數的順序與宣告時不一致,因為 Python 直譯器能夠用引數名匹配引數值。

printinfo( age=50, name="miki" );

預設引數:預設引數的值如果沒有傳入,則被認為是預設值

def printinfo( name, age = 35 ):
   "列印任何傳入的字串"
   print "Name: ", name;
   print "Age ", age;
   return;

不定長引數:可能需要一個函式能處理比當初宣告時更多的引數。這些引數叫做不定長引數。加了星號(*)的變數名會存放所有未命名的變數引數。

def printinfo( arg1, *vartuple ):
   "列印任何傳入的引數"
   print "輸出: "
   print arg1
   for var in vartuple:
      print var
   return;

Python 檔案I/O

  • 鍵盤輸入

raw_input([prompt]) 函式從標準輸入讀取一個行,並返回一個字串(去掉結尾的換行符):

 input 可以接收一個Python表示式作為輸入,並將運算結果返回。

str = input("請輸入:")
print "你輸入的內容是: ", str
請輸入:[x*5 for x in range(2,10,2)]
你輸入的內容是:  [10, 20, 30, 40]
  • 開啟和關閉檔案

必須先用Python內建的open()函式開啟一個檔案,建立一個file物件,相關的方法才可以呼叫它進行讀寫。

File 物件的 close()方法重新整理緩衝區裡任何還沒寫入的資訊,並關閉該檔案,這之後便不能再進行寫入。

write()方法可將任何字串寫入一個開啟的檔案。需要重點注意的是,Python字串可以是二進位制資料,而不是僅僅是文字。

tell()方法告訴你檔案內的當前位置

seek(offset [,from])方法改變當前檔案的位置。

Python 異常處理

  • 兩個非常重要的功能來處理python程式在執行中出現的異常和錯誤。

異常處理;

斷言(Assertions);

  • 異常處理

try的工作原理是,當開始一個try語句後,python就在當前程式的上下文中作標記,這樣當異常出現時就可以回到這裡,try子句先執行,接下來會發生什麼依賴於執行時是否出現異常。

try:
    fh = open("testfile", "w")
    fh.write("這是一個測試檔案,用於測試異常!!")
except IOError:
    print "Error: 沒有找到檔案或讀取檔案失敗"
else:
    print "內容寫入檔案成功"
    fh.close()
  • 觸發異常

可以使用raise語句自己觸發異常

# 定義函式
def mye( level ):
    if level < 1:
        raise Exception,"Invalid level!"
        # 觸發異常後,後面的程式碼就不會再執行
try:
    mye(0)            # 觸發異常
except Exception,err:
    print 1,err
else:
    print 2
  • 使用者自定義異常

通過建立一個新的異常類,程式可以命名它們自己的異常。