1. 程式人生 > >《莫煩Python3基礎教程》學習筆記

《莫煩Python3基礎教程》學習筆記

莫煩python學習連結:https://morvanzhou.github.io/tutorials/python-basic/basic/

目錄:

安裝  1.1 安裝

基本使用  2.1 print 功能 2.2 基礎數學運算 2.3 變數 variable 

while 和 for 迴圈  3.1 while 迴圈 3.2 for 迴圈 

if 判斷  4.1 if 判斷 4.2 if else 判斷 4.3 if elif else 判斷 

定義功能  5.1 def 函式 5.2 函式引數 5.3 函式預設引數 

變數形式  6.1 全域性 & 區域性 變數 

模組安裝  7.1 模組安裝 

檔案讀取  8.1 讀寫檔案 1      8.2 讀寫檔案 2       8.3 讀寫檔案 3 

class 類  9.1 class 類   9.2 class 類 init 功能 

input 輸入  10.1 input 輸入 

元組, 列表, 字典  11.1 元組 列表 11.2 list 列表 11.3 多維列表 11.4 dictionary 字典 

模組  12.1 import 模組  12.2 自己的模組 

其他  13.1 continue & break   13.2 try 錯誤處理   13.3 zip lambda map    13.4 copy & deepcopy 淺複製 & 深複製 

13.5 threading 什麼是多執行緒    13.6 multiprocessing 什麼是多程序    13.7 什麼是 tkinter 視窗    13.8 pickle 儲存資料 

13.9 set 找不同   13.10 正則表示式

安裝  1.1 安裝

Mac 安裝   

Mac使用者安裝 python會比較方便,直接到官網下載安裝包, 下載自己需要的版本,預設路徑安裝即可。之後的某節會講到如何給Mac中的python安裝其他模組, 比如比較常用的numpy 或者matplotlib

Windows 安裝   

請到官網下載需要的版本的安裝包, 下載所需(注意自己的系統是32位還是64位),安裝路徑最好選擇預設, 不然對於新手容易出現各種問題。  Windows 安裝附加要點: 設定環境變數(這很重要,不然就要裝好再設定比較煩瑣就是下面2的操作): 

1.找到安裝路徑, 預設 C:\Users\**你的使用者名稱**\AppData\Local\Programs\Python\Python35-32 貼上路徑 

2.我的電腦 - 屬性 - 高階 - 環境變數 - 系統變數中的PATH為(複製路徑): C:\Users\**你的使用者名稱**\AppData\Local\Programs\Python\Python35-32;  pip3 設定環境變數:  C:\Users\**你的使用者名稱**\AppData\Local\Programs\Python\Python35-32\Scripts;

基本使用

2.1 print 功能  
    1、字串疊加:+ 
       例:print('Hello world'+' Hello Hong Kong')
    2、簡單運算:加法+,減法-,乘法*,除法/.
       注意:字串不可以直接和數字相加,否則出現錯誤
       例:print(1+1)
    3、int() 和 float();當int()一個浮點型數時,int會保留整數部分,
           例:int(1.9),會輸出1,而不是四捨五入。
            print(float('1.2')+3) #float()是浮點型,可以把字串轉換成小數

2.2 基礎數學運算
    1、python可以直接運算數字
    2、次方:^與**
       例:3的平方為3**2 , **3表示立方,**4表示4次方
    3、取餘:%

2.3 變數 variable 
    1、自變數命名規則
       例:apple=1 #apple為自變數名稱,1位自變數

           一次定義多個自變數:a,b,c=11,12,13

while 和 for 迴圈  3.1 while 迴圈 3.2 for 迴圈 (這需要注意點嵌入的內容的縮排,當然如果是自己寫的話,直接回車就會生成標準的縮排格式,如果是複製的網上的程式碼來學習一下的話,就把他刪除到和上一列同行之後再回車或者自己記住縮排的格式,自己按空格鍵)

3.1 while 迴圈(與我們之前學的C語言差不多的語法結構)

while condition:     

expressions 

其中 condition 為判斷條件,在 Python 中就是 True 和 False 其中的一個,如果為 True, 那麼將執行 exexpressions 語句,否則將跳過該 while 語句塊接著往下執行。

例項   比如要打印出 0 - 9 的所有資料  

condition = 0 

while condition < 10:     

  print(condition)     

  condition = condition + 1 

輸出的結果將是 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 第一行設定 condition 的 初始值為 0,在進行 while 判斷的時候 0 < 10 為 True, 將會執行 while 內部 的程式碼,首先先打印出該值,然後將 condition 值加 1,至此將完成一次迴圈;再 condition 的值與 10 進行比較,仍然為 True, 重複如上過程,至到 condiiton 等於 10 後,不滿足 condition < 10 的條件(False),將不執行 while 內部的內容 所以 10 不會被列印

需要注意下面這個條件是個恆成立的程式,他的 while 部分 將永遠執行下去,可以按ctrl+c來結束

while(true) 

在使用 while 句法的時候一定要注意在迴圈內部一定要修改判斷條件的值,否則程式的 while 部分 將永遠執行下去  

 # 除了0(0.0)返回false其餘數字返回true、Noen返回false、list|tuple|dict|set集合元素數量為0返回false

高階主題 

在 Python 中除了常規比較操作  如:小於(<)   大於 (>)   不大於 (<=)  不小於 (>=)  等於 (==)  不等於 (!=)

會返回 True 和 False值,例如其他也會返回 True 和 False

1 數字  

整數和浮點數也能進行 Boolean 資料操作, 具體規則,如果該值等於 0 或者 0.0 將會返回 False 其餘的返回 True

condiiton = 10
while condiiton:
    print(condiiton)
    condiiton -= 1

輸出的結果將會是 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 在這裡 condition 在 while 語句中,如果該值 大於0,那麼將會返回為 True,執行迴圈內部語句,直至 condition 等於0,返回 False

2 None 型別

如果 while 後面接著的語句資料型別 None, 將會返回 False

3 集合型別

在 Python 中集合型別有 list、 tuple 、dict 和 set 等,如果該集合物件作為 while 判斷語句, 如果集合中的元素數量為 0,那麼將會返回 False, 否則返回 True

a = range(10)
while a:
    print(a[-1])
    a = a[:len(a)-1]

上述程式將會返回 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 程式首先判斷列表是否空,如果不為空,則 打印出最後一個內容,然後使用切片操作去掉最後一個元素,並更新列表;如此重複,直至列表為空。

  3.2 for 迴圈 (與while差不多,就語法上有差異,不同程式語言都有 for 語言,都一樣 用法如下:

for item in sequence:

    expressions

for item in sequence:  # sequence 為可迭代的物件,item 為序列中的每個物件。

  例項

example_list = [1,2,3,4,5,6,7,12,543,876,12,3,2,5]

for i in example_list:

    print(i)

輸出的結果為 1,2,3,4,5,6,7,12,543,876,12,3,2,5, 內容依次為 example_list 中的每一個元素 注意 Python 是使用縮排表示程式的結構,如果程式這樣編寫,

example_list = [1,2,3,4,5,6,7,12,543,876,12,3,2,5]

for i in example_list:

    print(i)

    print('inner of for')

print('outer of for')

那麼每次迴圈都會輸出 inner of for,在迴圈結束後,輸出 outer of for 一次。

       2)進階:range使用:range 函式將會返回一個序列
        a、range(start, stop):類似 數學中的表達 [start, stop),左邊為閉區間,右邊為開區間
           例:for i in range(1, 10):    
                       print(i)                         # 將會返回 1-9 所有整數,但不包含 10
        b、range(stop):預設從0開始,相當於range(0, stop)

        c、range(start, stop, step):step 代表的為步長。從 start 開始,依次增加 step 的值,直至等於或者大於 stop

for i in range(0,13, 5):

    print(i)

將會輸出 0, 5, 10。

       3)高階:Python 共內建了 list、 tuple 、dict 和 set 四種基本集合

tuple 型別

tup = ('python', 2.7, 64)

for i in tup:

    print(i)

程式將以此按行輸出 ‘python’, 2.7 和 64。

dictionary 型別

dic = {}

dic['lan'] = 'python'

dic['version'] = 2.7

dic['platform'] = 64

for key in dic:

    print(key, dic[key])

輸出的結果為:platform 64,lan python, version 2.7, 字典在迭代的過程 中將 key 作為可迭代的物件返回。注意字典中 key 是亂序的,也就是說和插入 的順序是不一致的。如果想要使用順序一致的字典,請使用 collections 模組 中的 OrderedDict 物件。

set 型別

s = set(['python', 'python2', 'python3','python'])

for item in s:

    print(item)

將會輸出 python, python3, python2 set 集合將會去除重複項,注意輸出的 結果也不是按照輸入的順序。

4.2 迭代器

Python 中的 for 句法實際上實現了設計模式中的迭代器模式 ,所以我們自己也可以按照迭代器的要求自己生成迭代器物件,以便在 for 語句中使用。 只要類中實現了 __iter__ 和 next 函式,那麼物件就可以在 for 語句中使用。 現在建立 Fibonacci 迭代器物件,

# define a Fib class

class Fib(object):

    def __init__(self, max):

        self.max = max

        self.n, self.a, self.b = 0, 0, 1

    def __iter__(self):

        return self

    def __next__(self):

        if self.n < self.max:

            r = self.b

            self.a, self.b = self.b, self.a + self.b

            self.n = self.n + 1

            return r

        raise StopIteration()

# using Fib object

for i in Fib(5):

    print(i)

將會輸出前 5 個 Fibonacci 資料 1,1, 2, 3, 5

        每個集合物件都可以迭代
        注意:
              字典中 key 是亂序的,也就是說和插入 的順序是不一致的。如果想要使用順序一致的字典,請使用 collections 模組 中的 OrderedDict 物件。
       4)迭代器
        for語法實現了迭代器模式, 只要類中實現了 __iter__ 和 next 函式,那麼物件就可以在 for 語句中使用

4.3 生成器

除了使用迭代器以外,Python 使用 yield 關鍵字也能實現類似迭代的效果,yield 語句每次 執行時,立即返回結果給上層呼叫者,而當前的狀態仍然保留,以便迭代器下一次迴圈呼叫。這樣做的 好處是在於節約硬體資源,在需要的時候才會執行,並且每次只執行一次。

def fib(max):

    a, b = 0, 1

    while max:

        r = b

        a, b = b, a+b

        max -= 1

        yield r

# using generator

for i in fib(5):

    print(i)

將會輸出前 5 個 Fibonacci 資料 1,1, 2, 3, 5

       5)生成器

            Python 使用 yield 關鍵字也能實現類似迭代的效果,yield 語句每次 執行時,立即返回結果給上層呼叫者,而當前的狀態仍然保留,以便迭代器下一次迴圈呼叫。
        這樣做的 好處是在於節約硬體資源,在需要的時候才會執行,並且每次只執行一次

              set 集合將會去除重複項,注意輸出的 結果也不是按照輸入的順序

if 判斷  4.1 if 判斷 4.2 if else 判斷 4.3 if elif else 判斷 

    1、python 語言中等號的判斷使用 ==     
    2、python 中並沒有類似 condition ? value1 : value2 三目操作符
        使用if-else 的行內表示式完成類似的功能
       例:var = var1 if condition else var2 #如果 condition 的值為 True, 那麼將 var1 的值賦給 var;如果為 False 則將 var2 的值賦給 var
    3、elif 語句新增多個判斷條件

定義功能  5.1 def 函式 5.2 函式引數 5.3 函式預設引數 

 1、def function_name(parameters): # Python 使用 def 開始函式定義,緊接著是函式名,括號內部為函式的引數
            expressions            # 內部為函式的具體功能實現程式碼,return有返回值
    2、函式呼叫的過程中給指明特定的引數 func(a=1, b=2), 這樣的話,引數的位置將不受影響,所以 func(b=2,a=1)是同樣的 的效果
    3、預設引數:函式宣告只需要在需要預設引數的地方用 = 號給定即可, 但是要注意所有的預設引數都不能出現在非預設引數的前面。
    4、自呼叫:if __name__ == '__main__':   # 該 if 判斷語句將會是 True,那麼內部的程式碼將會執行。 如果外部呼叫該指令碼,if 判斷語句則為 False,內部程式碼將不會執行
                #code_here        # 測試程式碼被呼叫時不希望被執行
    5、可變引數:def report(name, *grades):  #  後面的引數 *grades 使用了 * 修飾,表明該引數是一個可變引數,這是一個可迭代的物件
        注意可變引數在函式定義不能出現在特定引數和預設引數前面
    6、關鍵字引數:def portrait(name, **kw): # 使用了 ** 修飾。表明該引數是關鍵字引數。引數在函式內部自動封裝成一個字典(dict).

    通過可變引數和關鍵字引數,任何函式都可以用 universal_func(*args, **kw) 表達。

變數形式  6.1 全域性 & 區域性 變數 

   1、def 中, 我們可以定義一個區域性變數
    2、首先我們在外部定義一個全域性變數 a=None, 然後再 fun() 中宣告 這個 a 是來自外部的 a. 宣告方式就是 global a. 然後對這個外部的 a 修改後, 修改的效果會被施加到外部的 a 上

模組安裝  7.1 模組安裝 

1、外部模組就是在你 import 什麼東西去python 指令碼的時候會用到的.

import numpy as np

import matplotlib.pyplot as plt

這裡的 Numpy 和 matplotlib 都是外部模組, 需要安裝以後才會有的. 他不屬於 python 自帶的模組.

只要你在裡面輸入這種形式就可以安裝了.

$ pip install 你要的模組名

比如

$ pip install numpy   # 這是 python2+ 版本的用法

$ pip3 install numpy   # 這是 python3+ 版本的用法

更新外部模組 

使用 pip 更新外部模組會十分簡單. 主需要在 Terminal (終端)中輸入下面的指令就行. 這裡的 -U 就是 update 意思.

$ pip install -U numpy   # 這是 python2+ 版本的用法

$ pip3 install -U numpy   # 這是 python3+ 版本的用法

檔案讀取  8.1 讀寫檔案 1      8.2 讀寫檔案 2       8.3 讀寫檔案 3 

 1、\n 換行命令、\t tab 對齊
    2、開啟一個檔案
        例子:    my_file=open('my file.txt','w')   #用法: open('檔名','形式'), 其中形式有'w':write;'r':read.
            my_file.write(text)               #該語句會寫入先前定義好的 text
            my_file.close()                   #關閉檔案
    3、給檔案增加內容:
        例子:  append_text='\nThis is appended file.'  # 為這行文字提前空行 "\n"
            my_file=open('my file.txt','a')   # 'a'=append 以增加內容的形式開啟
            my_file.write(append_text)
    4、讀取檔案內容
        例子:content=file.read()  #讀取到文字的所有內容.
              content=file.readline()  # 讀取第一行
              content=file.readlines() # 讀取所有行,python_list 形式
            # 之後如果使用 for 來迭代輸出:
            for item in content:
                  print(item)

class 類  9.1 class 類   9.2 class 類 init 功能 

  1、class Calculator:       #首字母要大寫,冒號不能缺
            name='Good Calculator'  #該行為class的屬性
    2、cal=Calculator()  #注意這裡執行class的時候要加"()"
    3、init:相當於建構函式,__init__可以理解成初始化class的變數,可以在執行時,給初始值附值
        def __init__(self,name,price,height,width,weight):
        c=Calculator('bad calculator',18,17,16,15)

input 輸入  10.1 input 輸入 

1、variable=input(): 表示執行後,可以在螢幕中輸入一個數字,該數字會賦值給自變數
    2、input()應用在if語句中
        a_input=int(input('please input a number:'))#注意這裡要定義一個整數型
        if a_input==1:
    3、input擴充套件
        score=int(input('Please input your score: \n'))
        if score>=90:

元組, 列表, 字典  11.1 元組 列表 11.2 list 列表 11.3 多維列表 11.4 dictionary 字典 

 1、Tuple:用小括號、或者無括號來表述,是一連串有順序的數字
       例:    a_tuple = (12, 3, 5, 15 , 6)
        another_tuple = 12, 3, 5, 15 , 6
    2、list:是以中括號來命名的
       例:a_list = [12, 3, 67, 7, 82]

    3、tuple和list對比:他們的元素可以一個一個地被迭代、輸出、運用、定位取值
    4、list新增:a.append(0)  # 在a的最後面追加一個0
             a.insert(1,0) # 在位置1處新增0
       list移除:a.remove(2) # 刪除列表中第一個出現的值為2的項
       list索引:a[0]           # a的第0位的值
             a[-1]           # a的最末位的值
             a[0:3]          # a的從第0位 到 第2位(第3位之前) 的所有項的值
             a[5:]           # a的第5位及以後的所有項的值
             a[-3:]          # a的倒數第3位及以後的所有項的值
                 a.index(2)     # a中第一次出現的值為2的項的索引
             count(-1)      # 統計列表中某值出現的次數
       list排序:a.sort()             # 預設從小到大排序
             a.sort(reverse=True)     # 從大到小排序
    5、多維列表:一個一維的List是線性的List,多維List是一個平面的List
       例:multi_dim_a = [[1,2,3],
                  [2,3,4],
                  [3,4,5]] # 三行三列
        索引:multi_dim_a[0][1]
    6、dictionary 字典:無需順序的
       建立字典:d1 = {'apple':1, 'pear':2, 'orange':3}

模組  12.1 import 模組  12.2 自己的模組

     1、import time
    2、mport time as __,__下劃線縮寫部分可以自己定義,在程式碼中把time 定義成 t
       例:    import time as t
        print(t.localtime()) # 需要加t.字首來引出功能
    3、from time import time,localtime:只import自己想要的功能.
    4、from time import *: 輸入模組的所有功能
    5、模組寫好後儲存在預設資料夾:balance.py
        import balance
       下載的python模組會被儲存到外部路徑site-packages,同樣,我們自己建的模組也可以放到這個路徑,最後不會影響到自建模組的呼叫

其他  13.1 continue & break   13.2 try 錯誤處理   13.3 zip lambda map    13.4 copy & deepcopy 淺複製 & 深複製 

13.5 threading 什麼是多執行緒    13.6 multiprocessing 什麼是多程序    13.7 什麼是 tkinter 視窗    13.8 pickle 儲存資料 

13.9 set 找不同   13.10 正則表示式

 13.1   break:當符合跳出條件時,會直接結束迴圈

        continue:會直接進入下