--- title: Python Basic tags: python, basic --- [TOC] --- ## Fundamental Concept 1. Python為一[強型別程式語言](https://stackoverflow.com/questions/11328920/is-python-strongly-typed) ![](https://i.imgur.com/b58Zw3U.png) 2. Python的語法中沒有`{}`,因此是用縮排(indent)來判別範圍,縮排並沒有規定為多少空格,只要統一即可 3. Python中所有的東西都是物件,變數實際上是參考到一個物件(可以用id查看) - Immutable object:此物件的內容不能被更改,所以對此物件的更改實際上是創造一個新的物件,並將新物件的參考assign給變數 - 傳遞參數時**類似C/C++ call by value** - 常見的有: int、str、tuple - Mutable object:此物件內容可以被更改,因此每次對其做的更改,都對該物件的參考做更改 - 傳遞參數時**類似C/C++ call by reference** - 常見的有: list、dict - 這個觀念非常重要,一開始初學時因為不知道所以很常碰壁 4. 註解符號 - Single Comment: `#後面內容為單行註解` - Mutiple Comment: `""" 內容為多行註解 """` 5. Keyword 1. `pass` - 如同字面上的意思,當程式運行到 pass statement 時,會略過 - 非常常見,像是一開始規劃程式時,可以列出需要的function,但function body不能為空,此時就可以用pass略過;或是在處理Exception時,有時遇到一些例外可以略過不處理,也會用到pass 2. `is` - 用來判斷兩物件是否相等,跟`==`不同的是,`is`比較是兩物件的記憶體位址,`==`比較的是兩物件的值 ## Control Statement ### If Satement ```python= if condition: handle statement elif condition: handle statement else: handle statement ``` Condition 的部分可以加括號亦可不加 ### Ternary Operator :::danger Python 沒有 Ternary Operator ::: ```python= # 第一種方法 True Satement if Condition else False Satement # 第二種方法 (True Satement, False Satement)[Condition] # 歡迎提供更多方法 ``` ### Switch Statement :::danger Python 沒有 switch statement ::: 替代方案有蠻多種,這裡提供一個我自己用過還不錯的 ```python= # 使用 dict 模擬 switch # 使用時機為 內容行為可以直接用function處理 # 為不影響篇幅,假設fun已存在 handler = { '1' : fun1, '2' : fun2, '3' : fun3, } # 執行 fun_handle = handler[choice] fun_handle() # 簡化 handler[choice]() # 更好的寫法 handler.get(choice, lambda:print('No option'))() ``` ## Loop ### While Loop ```python= # 注意縮排 while Condition: statement ``` ### For Loop #### Start with common usage ```python= # Increment for i in range(5): print(i, end=' ') # 0 1 2 3 4 for i in range(2, 5): print(i, end=' ') # 2 3 4 for i in range(1, 5, 2): print(i, end=' ') # 1 3 # Decrement for i in range(5, 0, -1): print(i, end=' ') # 5 4 3 2 1 # List & Tuple listA = ['A', 'B', 'C'] for idx in range(len(listA)): print(listA[idx]) # A B C for elem in ['A', 2, 'C', 4]: print(elem, end=' ') # A 2 C 4 for n, s in [(1, 'one'), (2, 'two')]: print(n, '=', s, end= ' ') # 1=one 2=two ``` #### With enumerate > Pythonic 寫法 > enumerate(iterable, start=0) ```python= aList = ['one', 'two', 'six', 'ten'] for idx, val in enumerate(aList): print(f'{idx}:) {val}') # Output 0:) one 1:) two 2:) six 3:) ten # File with open(f_name) as fd: for i, line in enumerate(fd, 1): print('{}: {}'.format(i, line)) # logging for i, elem in enumerate(aList): try: pass except Exception as e: logging.error('{} on elem[] = '.format(e.args, i, elem)) # Reverse dict aDict = {elem : i for i, elem in enumerate(aList)} ``` #### Some Example 1. print the triangle ```python= n = 5 for i in range(n): print(' '*(n-i) + '*'*(2*i+1)) ''' * *** ***** ******* ********* ''' ```