天天看點

Python基礎 自用筆記Python基礎知識目錄1. 基本資料類型2. 分支結構3. 循環結構4. 集合5. 序列6. 函數7. 檔案的資料格式化

Python基礎知識

學習過程中記錄

目錄

  • 基本資料類型
    • 數字類型及操作
      • int 整數 可正可負 沒有取值範圍
      • double 浮點數
      • 複數類型
      • global聲明使用全局變量
      • 數值運算操作符
    • 字元串類型及操作
      • python 對字元串進行編号
      • 字元串切片用法
      • 字元串的特殊字元:
      • 字元串操作符
      • 字元串處理函數
      • 字元串處理方法
      • 字元串格式化
  • 分支結構
    • 單分支結構
    • 二分支結構
    • 多分支結構
    • 條件判斷:
      • 操作符
      • 條件組合
    • 異常處理
  • 循環結構
    • 周遊循環
    • 無限循環
    • 循環控制保留字
    • 循環的的擴充
  • 集合
    • 集合類型定義
    • 集合操作符
    • 增強操作符
    • 集合處理方法
  • 序列
    • 序列類型定義
    • 序列操作符
    • 函數和方法
    • 元組
    • 清單
      • 清單的定義
      • 清單操作函數及方法
    • 字典
    • 字典類型定義
    • 字典類型操作函數和方法
  • 函數
    • 函數的定義
    • 函數參數個數
    • 參數傳遞的兩種方式
    • 函數的傳回值
    • lambda函數 (謹慎使用)
  • 檔案的資料格式化
    • 檔案的類型
      • 文本檔案
      • 二進制檔案
    • 檔案的打開及關閉
    • 檔案内容的讀取

1. 基本資料類型

1.1. 數字類型及操作

1.1.1. int 整數 可正可負 沒有取值範圍

  • 四種進制:
    • 十進制:1010,99,-219
    • 二進制:(以0b或0B開頭) 0b010, -0B101
    • 八進制:(以0o或者0O開頭) 0o123, -0O456
    • 十六進制:(以0x或者0X開頭) 0x9a, -0X89

1.1.2. double 浮點數

  • 取值範圍 -10308到10308,精度數量級10^-16

      不确定尾數

  • round(x, d) 函數:

     對x進行四舍五入,d是小數截取位數

  • 科學計數法:

    使用字母E或者e為幂的符号,以10為基數,格式如下:

    <a>e<b> 表示 a*10^b

1.1.3. 複數類型

  • 複數是由一個實數和一個虛數組合構成,表示: x+yj
    • 實部: 可用 z.real獲得實部
    • 虛部: 可用 z.imag獲得虛部

1.1.4. global聲明使用全局變量

  • 關鍵字global,後跟一個或多個變量名

    global x

    x = 2

1.1.5. 數值運算操作符

一進制操作符:

  • x + y: 相加
  • x - y: 相減
  • x * y: 相乘
  • x / y: 相除
  • x // y: 整除 結果為整數
  • +x : x 本身
  • -x : x 的負值
  • x % y: 餘數, 模運算 10%3結果為1
  • x ** y: 幂運算,x的y次幂**(當y為小數時,為開方運算)**

二進制操作符:

  • x op= y
  • x = x op y, 其中,op為二進制操作符
  • x += y, x -= y, x *= y, x /= y,
  • x //= y, x %= y, x **= y

資料類型的關系:

整數 -> 浮點數 -> 複數

如果三種類型存在運算時,則會向右側轉型

1.2. 字元串類型及操作

字元串由一對單引号或者一對雙引号表示
           

1.2.1. python 對字元串進行編号

正向遞增序号 和 反向遞減序号

  • 正向遞增從0開始
  • 反向遞減從-1開始
  • 使用方法為:
    a = "我正在學習python"
    a[0] = "我"
    a[-1] = "n"
               

1.2.2. 字元串切片用法

使用[M:N:k]對字元串進行切片: M, N, K均可省略

  • M:為起始位置(預設從0開始)
  • N:為中止位置(預設到結尾)
  • K:為步長(意義為間隔, 預設為1)

1.2.3. 字元串的特殊字元:

轉義符:

轉義符 含義
\\ 輸出為’’
\n 輸出為換行
\t 輸出為制表符
\a 響鈴
\b 倒退,删除鍵
\’ 輸出"’",單引号
\" 輸出’"’,雙引号
\r 表示回車
\v 縱向位置添加制表符 為回車+制表符
\f 換頁符
\000 表示空
\x… …表示兩位,意思是用兩個16進制的數來表示一個字元
\… 表示用三個8進制數表示一個字元

1.2.4. 字元串操作符

  • x + y:

     連接配接兩個字元串

  • n * x 或 x * n:

     複制n次字元串x

  • x in s :

     如果 x 是 s 的子串,傳回True, 否則傳回False

1.2.5. 字元串處理函數

函數名稱及用法

名稱 用法
len(x) 長度, 傳回字元串x的長度(中文字元仍為 一個文字為一個字元)
str(x) 任意類型x所對應的字元串形式
eval(x) 将x字元串去除最外層分号,轉換為python可運作的指令
bin(x),oct(x),hex(x) 将整數x轉化為, 二進制, 八進制, 十六進制并傳回
chr(u) u為Unicode編碼, 傳回其對應的字元
ord(x) x為字元, 傳回其對應的Unicode編碼

1.2.6. 字元串處理方法

  • str.lower() / str.upper()

     傳回字元串的副本, 全部字元小寫/大寫

  • str.split(sep = None)

    傳回一個清單, 由str根據sep被分割的部分組成

    “A,B,C”.split(",")

    ['A', 'B' ,'C']

  • str.count(sub)

     傳回字串sub在str中出現的次數

  • str.rplace(old, new)

     傳回字元串str副本, 所有old字串被替換為new

  • str.center(width[,fillchar])

    傳回一個原字元串居中

    • width   總寬度
    • fillchar (可選) 為填充字元 預設為空格
    python".center(20,"=")

    ======python======

  • str.strip(chars)

     從str中去掉在其左側和右側 chars 中列出的字元

    “= python=”.strip(" =np")

    "ytho"

  • str.join(iter)

     在iter變量除元素為每一個元素後增加一個str

    “,”.join(“12345”)

    1,2,3,4,5

1.2.7. 字元串格式化

print("今天是d%月d%日, 我跑了%f米"%(1,1,100.2))

printf(f"這是{n}")

  • format()

    基本文法是通過 {} 和 : 來代替以前的 % 。

    format 函數可以接受不限個參數,位置可以不按順序。

  • 數字格式化見表格

    (表格來源)

    數字 格式 輸出 描述
    3.1415926 {:.2f} 3.14 保留小數點後兩位
    3.1415926 {:+.2f} +3.14 帶符号保留小數點後兩位
    -1 {:+.2f} -1.00 帶符号保留小數點後兩位
    2.71828 {:.0f} 3 不帶小數
    5 {:0>2d} 05 數字補零 (填充左邊, 寬度為2)
    5 {:x<4d} 5xxx 數字補x (填充右邊, 寬度為4)
    10 {:x<4d} 10xx 數字補x (填充右邊, 寬度為4)
    1000000 {:,} 1,000,000 以逗号分隔的數字格式
    0.25 {:.2%} 25.00% 百分比格式
    1000000000 {:.2e} 1.00e+09 指數記法
    13 {:>10d} 13 右對齊 (預設, 寬度為10)
    13 {:<10d} 13 左對齊 (寬度為10)
    13 {:^10d} 13 中間對齊 (寬度為10)
    11

    ‘{:b}’.format(11)

    ’{:d}’.format(11)

    ’{😮}’.format(11)

    ’{:x}’.format(11)

    ’{:#x}’.format(11)

    ’{:#X}’.format(11)

    1011

    11

    13

    b

    0xb

    0XB

    進制

2. 分支結構

2.1. 單分支結構

if <條件> :
    <語句塊>
           

2.2. 二分支結構

if <條件> :
    <語句塊1>
else :
    <語句塊2>
           

2.3. 多分支結構

if <條件1> :
    <語句塊1>
elif <條件2> :
    <語句塊2>
    ······
else :
    <語句塊n> 
           

2.4. 條件判斷:

2.4.1. 操作符

  • <: 小于
  • <=: 小于等于
  • >: 大于
  • >=: 大于等于
  • == : 等于
  • != : 不等于

2.4.2. 條件組合

  • x and y :

     兩個條件x和y的邏輯 與

  • x or y :

     兩個條件x和y的邏輯 或

  • not x :

     條件x的邏輯 非

2.5. 異常處理

try語句
    try:
        代碼塊(可能出現錯誤的語句)
    except 異常類型 as 異常名:
        代碼塊(出現錯誤以後的處理方式)
    except 異常類型 as 異常名:
        代碼塊(出現錯誤以後的處理方式)
    except 異常類型 as 異常名:
        代碼塊(出現錯誤以後的處理方式)
    else:
        代碼塊(沒出錯時要執行的語句)    
    finally:
        代碼塊(該代碼塊總會執行)    
           
注意:
  1. try是必須的 else語句有沒有都行
  2. except和finally至少有一個
  3. 可以将可能出錯的代碼放入到try語句,這樣如果代碼沒有錯誤,則會正常執行,如果出現錯誤,則會執行expect子句中的代碼,這樣我們就可以通過代碼來處理異常避免因為一個異常導緻整個程式的終止

3. 循環結構

3.1. 周遊循環

- for <循環變量> in <周遊結構>:
    <語句塊>
           

3.2. 無限循環

- while <條件>:
    <語句塊>
           

3.3. 循環控制保留字

- break
    結束整個循環
- continue
    結束目前循環
           

3.4. 循環的的擴充

可以在循環後面加如下:

- else 
    //當循環沒有被break語句推出時,執行else語句塊
    - for <循環變量> in <周遊結構>:
            <語句塊1>
        else :
            <語句塊2>

    - while <條件>:
            <語句塊1>
        else :
            <語句塊2>
           

4. 集合

  1. 集合是多個元素的無序組合
  2. 每個元素唯一,不存在相同元素
  3. 集合元素不可更改,不能是可變資料類型

4.1. 集合類型定義

  1. 集合用大括号{}表示,元素間用逗号隔開
  2. 建立集合類型用{} 或 set()
  3. 建立空集合類型, 必須使用set()

4.2. 集合操作符

  1. S|T:
    傳回一個新的集合,包括在集合S和T中的所有元素
  2. S-T:
    傳回一個新的集合,包括在集合S但不在T中的元素
  3. S&T:
    傳回一個新的集合,包括同時在集合S和T中的元素
  4. S^T:
    傳回一個新的集合,包括集合S和T中的非相同元素
  5. S <= T或 S < T:
    傳回True/False,判斷S和T的子集關系
  6. S >= T 或 S < T:
    傳回True/False,判斷S和T的包含關系

4.3. 增強操作符

  • 增強操作符
    增強 等價于
    S |= T S = S\T
    S -= T S = S - T
    S &= T S = S&T
    S ^= T S = S^T

4.4. 集合處理方法

  • 函數及其作用
    函數 作用
    S.add(x) 如果x不再集合S中,将x增加到S
    S.discard(x) 移除S中元素x,如果x不在集合S中,不報錯
    S.remove(x) 移除S中元素x,如果x不在集合S中,産生KeyError異常
    S.clear() 移除S中所有元素
    S.pop() 随機傳回S的一個元素,更新S,若S為空産生KeyError異常
    S.copy() 傳回集合S的一個副本
    len(S) 傳回集合S的元素個數
    x in S 判斷S中元素x, x在集合S中, 傳回True, 否則傳回False
    x not in S 判斷S中元素x, x不再集合S中,傳回True, 否則傳回False
    set(x) 将其他類型變量x轉變為集合類型

5. 序列

5.1. 序列類型定義

序列是一位元素向量,元素類型可以不同
類似數學元素序列: S1, S2,……,Sn-1
元素間由序号引導,通過下标通路序列的特定元素

正向遞增序号

反向遞減序号

5.2. 序列操作符

  • 操作符執行個體及作用:
    執行個體 作用
    x in s 檢視x是否為s的元素,傳回bool值
    x not in s 檢視x是否為s的元素,傳回bool值
    s + t 連接配接兩個序列
    s*n *n*s 将序列複制n次
    s[i] 索引, 傳回s中的第i個元素
    s[i, j, k] 切片,與字元串相同

5.3. 函數和方法

函數 作用
len(s) 傳回序列的長度
min(s) 傳回序列s的最小元素
max(s) 傳回序列s的最大元素
s.index(x), s.index(x,i,j) 傳回序列s從i到j位置中第一次出現的元素x位置
s.count(x) 傳回序列s中出現x的總次數

5.4. 元組

  • 元組的定義
    元組是一種序列類型,一旦建立就不能被修改
    使用小括号()或tuple()建立,元素間用逗号,分隔
    可以使用或不使用小括号

5.5. 清單

5.5.1. 清單的定義

  1. 清單是一種序列類型, 建立後可以随意被更改
  2. 使用方括号[]或者List()建立,元素間用逗号,分隔
  3. 清單中個元素類型可以不用,無長度限制
注意:清單指派時,僅僅将一個清單名隻想前一個清單而并沒有複制源清單本身

5.5.2. 清單操作函數及方法

函數 作用
ls[i] = x 替換清單ls第i元素為x
ls[i:j:k] = lt 用清單lt替換ls切片後所對應元素子清單
del ls[i] 删除清單ls中第i元素
del ls[i:j:k] 删除清單ls中第i到第j以k為步長的元素
ls += lt 更新别來ls,将清單lt元素增加到清單ls中
ls *= n 更新清單ls,其元素重複n次
ls.append(x) 在清單最後增加一個元素x
ls.clear() 删除清單ls中所有元素
ls.copy() 生成一個新清單,複制ls中所有元素
ls.insert(i, x) 在清單的第i個文職增加元素x
ls.pop(i) 将清單中第i文職元素取出并删除該元素
ls.remove(x) 将清單中出現的第一個元素x删除
ls.reverse() 将清單ls中元素反轉

5.6. 字典

5.7. 字典類型定義

  1. 鍵值對: 鍵是資料索引的擴充
  2. 字典是鍵值對的組合, 簡直對之間無序
  3. 采用大括号{}和dict()建立,鍵值對用冒号:表示

5.8. 字典類型操作函數和方法

函數 作用
del d[k] 删除字典d中鍵k對應的資料
k in d 判斷鍵k是否在字典d中,傳回bool類型
d.keys() 傳回字典d中所有的鍵資訊
d.values() 傳回字典d中所有的值的資訊
d.items() 傳回字典d中所有的鍵值對資訊
d.get(k, ) 鍵k存在,則傳回相應值,不再則傳回值
d.pop(k, ) 鍵k存在,則傳回相應值,不再則傳回值
d.popitem() 随機從字典d中取出一個鍵值對,以元組形式傳回
d.clear() 删除所有的鍵值對
len(d) 傳回字典d中元素的個數

6. 函數

6.1. 函數的定義

  1. 函數是一段具有特定功能的、可重用的語句組
  2. 函數是一種功能的抽象,一般函數表達特定功能
  3. 兩個作用: 降低程式設計難度 和 代碼複用
    def <函數名>(<參數(0個或多個)>):
        <函數體>
        return <傳回值>
               

6.2. 函數參數個數

  • 函數可以有參數,也可以沒有, 但必須保留括号
  • 函數定義時可以為某些參數指定預設值,構成可選參數

     (但是需要放在非可選參數後面)

    def <函數名>(<非可選參數>, <可選參數>):

       

    <代碼塊>

  • 函數定義時可以設計可變數量參數,即不确定參數總數

    def <函數名>(<參數>, *b):

6.3. 參數傳遞的兩種方式

  • 按照位置傳遞
  • 按照名稱方式傳遞

6.4. 函數的傳回值

  • return保留字用來傳遞傳回值
  • 函數可以有傳回值,也可以沒有,可以有return,也可以沒有
  • return 可以傳遞0個傳回值,也可以傳遞任意多個傳回值

6.5. lambda函數 (謹慎使用)

  • lambda函數是一種匿名函數,即沒有名字的函數
  • 使用lambda保留字定義,函數名是傳回結果
  • lambda函數勇于定義簡單是、能夠在一行内表示的函數
    <函數名> = lambda<參數>:<表達式>
    
    等價于 => def <函數名>(<參數>):
                  <函數體>
              return <傳回值>
               

7. 檔案的資料格式化

7.1. 檔案的類型

  • 檔案是資料的抽象和集合
    1. 檔案是儲存在輔助器的資料序列
    2. 檔案是資料儲存的一種形式
    3. 檔案展現形态: 文本檔案和二進制檔案

7.1.1. 文本檔案

  • 有單一特定編碼組成的檔案, 如UTF-8編碼
  • 由于存在編碼,也被堪稱是存儲着的長字元串

7.1.2. 二進制檔案

  • 直接由比特0和1的組織結構,沒有同意字元編碼
  • 一般存在二進制0和1的組織結構,即檔案格式

7.2. 檔案的打開及關閉

open(“路徑”, “打開模式”)
  • 打開模式
    标示 作用
    ‘r’ 隻讀模式,預設值,如股票檔案不存在,傳回FileNotFoundError
    ‘w’ 覆寫寫模式,檔案不存在則建立,存在則完全覆寫
    ‘x’ 建立寫模式,檔案不存在則建立,存在則傳回FileExistsError
    ‘a’ 追加寫模式,檔案不存在則建立,存在則在檔案最後追加内容
    ‘b’ 二進制檔案模式
    ‘t’ 文本模式,預設值
    ‘+’ 與r/w/x/a一同使用,在原功能基礎上增加同時讀寫功能
  • close()
    <變量名>.close()

7.3. 檔案内容的讀取

<f>.read(size = -1)

  讀入全部内容, 如果給出參數,讀入前size長度

<f>.readline(size = -1)

  讀入一行内容,如果給出參數,讀入改行前size長度
  • <f>.readlines(hint = -1)

      讀入檔案所有行, 以每行為元素形成清單如果給出參數,讀入前hint行

檔案内容的寫入

  • <f>.write(s)

    向檔案寫入一個字元串或位元組流
  • <f>.writelines(lines)

    将一個元素全為字元串的列标寫入檔案
  • <f>.seek(offset)

    改變目前檔案操作指針的位置,offset含義如下:
    • 0 檔案開頭;
    • 1 目前位置;
    • 2 檔案結尾;

同步筆記