2017年11月26日 星期日

Python 一讀

python有很多好用的工具,函式庫,就來學一下吧:



Google提供的虛擬機(colaboratory),提供CPU, GPU給有google帳戶的人使用。
連結:https://colab.research.google.com
環境是使用jupyter notebook,登入google帳戶後直接到連結網址就可以開始寫python了!
還可以跑Machine learning又不用擔心房間過熱!

參考網站:python_org_tutorial

網站目錄:https://docs.python.org/3/tutorial/index.html

python與swift很像…


  1. 安裝Python 3
    •  Anaconda
    •  
  2.  特點
    1. 任何資料皆為"物件",變數皆為"參考"(也就是類似c語言的pointer,但可能有快取),包括常數,資料型態,函式定義,類別,…
      1. 例如:要製作函式別名,def b(): ......
        只要用 c = b,   就可以使用c()代表b()
    2. OOP
    3. 弱資料型別,不用特別宣告資料型態
    4. 冪次運算元 - "**"
    5. 除法後取整數之運算元(floor division) - "//"
    6. 特別資料型態:decimal, fraction(分數),複數
    7. 字串
      1. 單引號與雙引號功能一致(與shell script不同)
      2. 用三個引號可以寫出多行的字串
      3. 運算子: '*', '+'
      4. 取得子字串[i:j] (得到i to j-1 的字串)
      5. 為immutable,不能直接修改內容值
      6.  (201908)字串處理:
        https://www.pythonforbeginners.com/basics/string-manipulation-in-python
    8. 陣列索引值可為負數 (從陣列結尾開始算)

    9. 變數賦值寫在同一行 ex: a,b =3,4
    10. if寫法為:
      if a is b :
          print('a is b')
      單行的語句可寫成倒裝,但一定要有else statement:
      Example 1
      print('a is b') if a is b else print('a is not b')
      
       Example 2
      result = 'a is b' if a is b else 'a is not b'
    11. for 迴圈可加上'else'僅在for迴圈執行完才執行(若break就不會執行到)
    12. pass 指令,因為python的while, for不能只寫一行,所以要用pass!
    13. 函式定義keyword - def functionName(parameters):

    14. list comprehension 的組成,是包含著一個 expression(運算式)和一個 for 語句
    15. 常用資料型態(相關連結)
      1. Integer, Floating, String
      2. list - 用中括號. ex: a = [1,2,3]
      3. tuple - 用小括號. ex: a = (1,2,3)
      4. Set (集合)  -- 無序,資料不重複,要用set()宣告
      5. dictionary - 用大括號  ex: b = {'a': 3, 'b':4, 'c':5...}  ==> b['a'] == 3
    16. literal modifier - String 也有prefix (ex: r'...'代表該字串內為純文字,沒有跳脫字元)
    17. list 用 []賦值  -- list是mutable
    18. tuple用 () 賦值或是直接逗號分隔  -- tuple是immutable (所以沒有append...insert...)
    19. module --一個script檔,包含許多functions,也可以在其中寫會被執行的script。
      if __name__ == "__main__":
          import sys
          fib(int(sys.argv[1]))
      上述寫法可以避免當此module被import時,import, fib()....被執行
    20. package - 一包module
      需要 __init__.py module讓python知道此為一個package
    21. 從package import一個module, function, ...可以寫 from ..package.. import ..module..
    22. try: ...
      except (ErrorType):
      else:
      import sys
      
      try:
          f = open('myfile.txt')
          s = f.readline()
          i = int(s.strip())
      except OSError as err:
          print("OS error: {0}".format(err))
      except ValueError:
          print("Could not convert data to an integer.")
      except:
          print("Unexpected error:", sys.exc_info()[0])
          raise
    23. 類別 class
       - 參考C++, Modula --
      屬性可以是RO或RW
      也可以定義 global, nonlocal, local
      class ClassName:
          <statement-1>
          .
          .
          .
          <statement-N>
      定義function要加上(self)參數!
      class Class1:
          def func1(self):
              ....
      1. 建構子:  __init__(self, ....):
        self就代表此實體的物件,名稱空間
      2. 實體化就用 b = ClassName(...) <-- ...為建構子的參數
      3. class variable 是在class中定義的靜態attribute -- 各實體皆一致(初始),
        instance variable 是由class的function初始的變數 -- 各實體即不一致。
        此機制會造成class variable裡有mutable attribute時,會改到其它instance的class variable
    24. Class 繼承
      語法: class DerClassName(BaseClass1, BaseClass2...):
      優先權DerClass > BaseClass1 > BaseClass2 ... (找function的順序就是Der --> BaseClass1 --> BaseClass2 ...
      覆寫函式要呼叫BaseClass - BaseClassName.FunctionName(self, arguments...)
      super()是一個BaseClass1的物件
    25.  要讓class可以用在for ... in ,要實作iter()函式,回傳一個實作__next__()函式的iterator object,__next__()就是回傳下一個iteration要用的資料
      class Reverse:
          """Iterator for looping over a sequence backwards."""
          def __init__(self, data):
              self.data = data
              self.index = len(data)
      
          def __iter__(self):
              return self
      
          def __next__(self):
              if self.index == 0:
                  raise StopIteration
              self.index = self.index - 1
              return self.data[self.index]
      另一個可以用在for ... in的是執行yield函式產生資料(iterator)。
      def reverse(data):
          for index in range(len(data)-1, -1, -1):
              yield data[index]
      
      >>>
      >>> for char in reverse('golf'):
      ...     print(char)
      ...
      f
      l
      o
      g
    26. (201908補充) @ Property函式 及語法:
      @Property 修飾的function可被外部用Attribute的方式呼叫:
      class A:
          @ property
      B_func(self):
       return ... 
      可用A.B_func的方式呼叫B_func。
      https://openhome.cc/Gossip/Python/Property.html
    27. generator expression
      一段簡單表示法可以產生一個generator物件,讓其它可以吃generator class的函數使用。
      例:
      >>> sum(i*i for i in range(10))                 # sum of squares
      285
    28.  
    29.  查詢函式庫中有哪些"物件":
      dir(), help()...
    30. 標準函式庫 -- stdlib.html, 目錄
      1. os
      2. shutil
      3. glob (搜尋檔案及匹配檔名)
      4. sys
      5. re  - regular expression
      6. math

    31. 額外資源:
      https://docs.python.org/3/tutorial/whatnow.html
    32. 常用函式庫
      1. json




沒有留言:

張貼留言

2020 Pi錢包三倍券加碼回饋機制決策分析

 Pi錢包說 “ 三倍券 ” 中的 2000 元每次消費的都會獲得 p 幣加碼回饋的抽獎機會 試問消費策略?消費越多次越佳或越少次越佳?