Python small note

運算子





  • A**B #A的B次方




註解





  • # #單行註解


  • """ #多行註解




and or not



優先順序 not > and > or





IF ELSE





  • 用縮排來判斷是不是在if,而不是用大括號。


  • elif == else if


  • In C

    if (condition) {

    ...

    }else if (condition){

    ...

    }else{

    ...

    }


  • In Python

    if (condition) :

    ...

    elif (condition) :

    ...

    else:

    ...




Function





  • In C #用大括號來判別是不是這個function的內容

    int function(parameter){

    ....

    ....

    }


  • In Python #用縮進來判別是不是這個function的內容

    def function(parameter):

    ....

    ....




Anonymous Functions





  • 使用方法:



    • lambda 回傳值 : 程式碼


    • 常用: print filter(lambda 回傳值 : 程式碼, list)






  • lambda x: x % 3 == 0

    相等於


    def
    by_three(x):

        return x % 3 == 0




import





  • In C

    #include <something>


  • In Python

    import somthing



    • function import

      from module import function

      from moudle import *








用索引存取字串 ( Access by Index )





  • varName = "cats"[0] #把cats中第0個元素('c')放到varName變數中 == "cats"[0:1]。


  • varName = "cats"[1:3] #從cats中位置1開始抓元素直到位置3之前(at)。




字串函數





  1. len(strName) #長度


  2. .lower() #小寫化


  3. .upper() #大寫化


  4. str(dataName) #字串化


  5. print strName #印出字串


  6. .isalpha() #是不是英文字串


  7. 字串連接用 '+'


  8. str.join(list) #回傳一個string,內容是list所有的值並以str為中間的分隔符號。


  9. str.split(var) #回傳一個list,內容是以var為分隔符號把str拆開。




for in





  • 用for in 走訪字串



    • a = "List XD”

      for x in a:

      print x

      -->

      L

      i

      s

      t



      X

      D






  • for i in range(5):  # = for (i=0; i<5; i++)  (C語言)


  • for i in range(5): #當i = 5時,就不會在range(5)的範圍內,所以會執行else"一次"。

    .....

    else:

    .....




while





  • while (condition): #當condition成立時執行,直到不成立。

    ....


  • while (condition): #當condition成立時執行,不成立時執行else"一次"。

    ....

    else:

    ....




數字函數





  1. max()


  2. min()


  3. abs()


  4. sum()




其他函數





  • range() #產生一個範圍的數字(list)



    • range(6) # => [0,1,2,3,4,5]

      range(1,6) # => [1,2,3,4,5]

      range(1,6,3) # => [1,4]



    • 可以用 in 與 not in 來判斷某個數字是不是在這範圍中



      • if ( 3 in range(8) ): #True


      • if ( 3 not in range(8) ): #False










  • from random import randint #randint(low,heigh) 產生一個隨機的整數從low(包含)到heigh(包含)。


  • enumerate(list) #列舉list,並以index表示弟幾個值,通常用在for in





    • for index, tmp in enumerate(var):

      print index, tmp

      -->

      0 data1

      1 data2

      2 data3

      .

      .

      .






  • zip(list1, list2, ...) #合併list,將多個list合並成一個,通常用在for in



    • for a, b in zip(list_a, list_b):

      print a, b

      -->

      adata[0] bdata[0]

      adata[1] bdata[1]

      adata[2] bdata[2]

      .

      .

      .






  • filter (function, iterable) #通常是把itterable的值一個個放到function值中,並把function回傳的一個個值包成itterable的種類回傳出來。


  • bin(digit) #回傳字串,以將int以二進制的格式輸出 Ex : 0bXXX。


  • oct(digit) #回傳字串,以將int以八進制的格式輸出 Ex : 0XXX。


  • hex(digit) #回傳字串,以將int以十六進制的格式輸出 Ex : 0xXXX。




List





  • var = [data1, data2, data3, data4 ] #直接指定值


  • var = [i for i in range(51) if i % 2 == 0 ] #這在python被稱為list comprehension,python在建立list時可以使用for/in if


  • list comprehension



    • var = [x for x in range(1,6)] # => [1, 2, 3, 4, 5]


    • var = [x*2 for x in range(1,6)] # => [2, 4, 6, 8, 10]


    • var = [x*2 for x in range(1,6) if (x*2)%3 == 0] # => [6]


    • c = ['C' for x in range(5) if x < 3] # => ['C''C''C']






  • var.append(data) #在最後面加入值


  • var.remove(data) #從第零個位置開始找data並刪除他(只刪除第一個找到的data)。


  • var.pop(index) #刪除第index位置的資料,並回到該資料的值。


  • del(var(index)) #刪除第index位置的資料,但不回傳值。


  • print var #印出所有值像這樣的形式 [ data1, data2, ...]


  • len(var) #印出共有幾個元素


  • List Slicing 切片



    • var = [ "a", "b", "c", "d", "e", "f", "g", "h" ]


    • var[包含:不包含]


    • var[0:2] #{取第零個到第二個前 == [ "a", "b" ]  。} == for (i=0; i<2; i++) printf ("%s",var[i]); # for是c語言


    • var[5:] #取第五個到最後。 == for ( i=5; i<len(var);i++) printf ("%s",var[i]);


    • var[:3] #取第三個前 == for (i=0;i<3;i++) print ("%s", var[i]);


    • var[::2] #取值,一次跳兩步 == for (i=0; i<len(var); i+=2) print ("%s", var[i]);


    • var[1:5:2] #取第一個到第五個前一次跳兩步 == for (i=1; i<5 ;i+=2) print ("%s", var[i]);


    • var[::-1] #取值,從最後一個一步一步回來 == for (i=len(var)-1; i>=0; i--) print ("%s", var[i]);






  • var.index(data) #回傳data的位置


  • var.insert(1, data) #把data插入到位置1,原本位置1的值向後順沿。


  • sorted(list) #排序list的值(由小到大)


  • for var_tmp in var: #走訪每個一var並把每次走訪時的資料放到var_tmp中。


  • var.sort() #照字母順序排序。


  • 用for in 走訪list



    • for tmp in var:

      print tmp

      -->

      data1

      data2

      data3

      .

      .

      .






  • 用for in 走訪list並用enumerate加上index



    • for index, tmp in enumerate(var):

      print index, tmp

      -->

      0 data1

      1 data2

      2 data3

      .

      .

      .






  • 用for in 走訪多個list用zip



    • for a, b in zip(list_a, list_b):

      print a, b

      -->

      adata[0] bdata[0]

      adata[1] bdata[1]

      adata[2] bdata[2]

      .

      .

      .






  • str.join(var) #回傳一個string,內容是var所有的值並以str為中間的分隔符號。



    • Ex:

      letters = ['a', 'b', 'c', 'd']

      print " +d+ ".join(letter)

      -->

      a +d+ b +d+ c +d+ d








Dictionaries





  • var = {'key1' : 'data1', 'key2' : 'data2', 'key3' : 'data3' ... } #直接指定值,這邊都指定字串,所以會有'字元


  • var['keyName'] = data #新增一個值


  • del var['kyeName'] #刪除一個值


  • print var #印出所有值像這樣的形式 {'key3': 'data3', 'key2': 'data2', 'key1': 'data1'}


  • print var.items() #印出所有值像這樣的形式 [('key3', 'data3'), ('key2', 'data2'), ('key1', 'data1')]


  • print var.keys() #印出所key像這樣的形式['key3', 'key2', 'key1']


  • print var.values() #印出所value像這樣的形式[['data3', 'data2', 'data1']


  • for key in var

    print var[key]

    -->

    data1

    data2

    data3

    .

    .

    .




In





  • for number in range(5):

    print number,

    -->

    0 1 2 3 4


  • var = { "key1": "data1" , "key2": 2 }

    for key in var:

    print key, var[key],

    -->

    key2 2 key1 data1


  • for letter in "SkyNimo":

    print letter,

    -->

    S k y N i m o




datetime





  • 引用方式

    from datetime import datetime


  • 使用



    • datetime.now() #2014-09-25 07:21:50.451133


    • datetime.now().year #2014


    • datetime.now().month #9


    • datetime.now().day #25


    • datetime.now().hour #7


    • datetime.now().minute #26


    • datetime.now().second #49








格式化輸出





  • "...Fromat..." % (data1, data2, ...) # 回傳格式化後的字串



    • EX :

      ans = "%d * %d = %d." % (3, 2, 3*2)

      print ans

      --->

      3 * 2 = 6.








print 對照C語言的printf





  • In C

    printf("%d%s%\n", var1, var2);


  • In Python

    print "%d%s\n" % (var1, var2)


  • Python 預設print會換行,在最後加一個逗號以空白取代換行

    print 'X',

    print '%s' % char ,




raw_input or scanf?





  • In C

    printf("Please Input Something:");

    scanf("%s", var);


  • In Python)

    var = raw_input("Please Input Stomething:")




形態轉換





  • float(data)


  • int(string)



    • int(string, base) #把string當成base進制,回傳成int形態(十進制)。



      • Ex: print int("0b101", 2) # 5












Bitwise(二進制)





  • 表示方法:0b101 # 以二進制表示十進制的5。


  • 一樣可以進行加減乘除 Ex: print 0b10 * 0b11 # 6.


  • bin(digit) #回傳字串,以將int以二進制的格式輸出 Ex : 0bxxx。


  • 0b1000 #8



    • 0b1000 & 0b0111 #以and運算讓第四個位元為0 -> 0b0


    • 0b1000 | 0b100 #以or運算讓第三個位元為1 -> 0b1100


    • 0b1000 ^ 0b1111 #以xor反向位元 ->0b111








其他





  • python 不用分號結尾


  • 單行如果太長可在最後面加入'\',並會把下一行視為這一行。


  • varName = raw_input("SomeThing") #顯示SomeThing字樣並等待使用者輸入,輸入值將會存放到varName中。


  • type(somethine) #回傳一個字串並說明他的型態 like this : <type 'float'>


  • 整數除整數還是整數 EX: 5/2 -->2

    浮點數除整數,整數會相容成浮點數 EX: 5.0/2 -->2.5


  • "x" *5 = xxxxx  , ["x"] *5 = ['x', 'x', 'x', 'x', 'x']


  • in ,not in



    • digit in range(number)


    • char in "string"


    • something is [data1, data2, ...]








物件導向



宣告





  • class ClassName(object): # 小括號中的object代表:ClassName它inherit(繼承)自object。在python中class名稱通常第一個字大寫。

    def functionName( .. ) :

    self.varName = ...  # 在python 這邊是用self代替this這個關鍵字

    ....

    ....




使用





  • varObject = ObjectName() # 建立一個ObjectName物件,並用varObject變數指向他。




建構子





  • class Animal(object):

    def __init__(self): # self是python的慣例,之後可以用self來呼叫自己。

    pass




繼承





  • class A(object):

    ....

    class B(A): # B繼承自A。

    ....




使用父類別的函式





  • class A(object):

    def A_fun(self):

    ....

    class B(object):

    def B_fun(self):

    super(B, self).A_fun() # 這邊B類別使用他父類別(A)的A_fun()函式。




函式





  • def description(self): # self讓python知道這個函式是哪個物件的。

    print self.name

    print self.age




檔案輸入輸出 file I/O



檔案開啟與結束





  • varF = open("fileNameString" , modeString) # 用open開啟fileNameString以modeString模式。

    ....

    varF.close() # 關畢該檔案。


  • @modeString



    • "w" : write-only


    • "r" : read-only


    • "r+" : read and write


    • "a" : append new data to you write to the file








檔案寫入





  • f = open("output.txt", "w")

    f.wrtie("1234\n") # 寫入"1234\n"。

    f.close()




檔案讀取





  • 一次讀取一行



    • f = open("input.txt", "w")

      print f.readline() # 把讀取到的資料印出來。

      f.close()






  • 一次讀取全部



    • f = open("input.txt", "w")

      print f.read() # 把讀取到的資料印出來。

      f.close()








檢查檔案是否己關畢





  • File物件中有一個boolean變數代表檔案是否己關畢 -->.closed



    • if (varF.closed):

      print "檔案己關畢"

      else

      print "檔案還沒關畢喔!!"








不用.close()的方法,一次性取讀寫入:with as







  • with open("fileNameString", "modestring") as varF:

    varF.read()

    varF.write("...")







 

留言

這個網誌中的熱門文章

成人剪舌繫帶聽過嗎?我剪了!!

Scp - ssh 的遠端檔案傳輸指令

睡覺使你更有效率