1. 程式人生 > >Python常忘的基礎知識

Python常忘的基礎知識

0.目錄

1.進位制

1.進位制

1.1 各進位制的表示

0b(零b)表示二進位制
0o(零o)表示八進位制
0x(零x)表示十六進位制

1.2 各進位制的轉換

bin() 將其他進位制數轉化為二進位制
int() 將其他進位制數轉化為十進位制
hex() 將其他進位制數轉化為十六進位制
oct() 將其他進位制數轉化為八進位制

2.字元

2.1 轉義字元

轉義字元:

  • 特殊的字元
  • 無法“看見”的字元
  • 與語言本身語法有衝突的字元
  • \n 換行
  • \r 回車
  • ' 單引號
  • \t 橫向製表符

    2.2 原始字串

    用 r'字串' 或 R'字串' 表示原始字串

    3.型別

    3.1 基本資料型別

    有序(序列):
  • 列表 list
  • 元組 tuple

無序:

  • 集合 set
  • 字典 dict

序列共有的操作:

  • len() 求序列的長度
  • max()最大元素
  • min()最小元素
  • ord()ASCII碼

集合的操作:
{1,2,3,4,5,6} - {3,4} 為 {1,2,5,6}
{1,2,3,4,5,6} & {3,4} 為 {3,4}
{1,2,3,4,5,6} | {3,4,7} 為 {1,2,3,4,5,6,7}

字典的規則:

  • 不能有相同的key
  • key的取值:必須是不可變型別,如int str tuple
  • value的取值:str int float list set dict

    3.2 type()

    type((1)) 是 int
    type((1,)) 是 tuple

type(('hello')) 是 str
type([1]) 是 list

定義空元組:type(())
定義空集合:type(set())
定義空字典:type({})

4.變數與運算子

4.1 值型別與引用型別

值型別:int str tuple(不可變)

引用型別:list set dict(可變)

id()函式顯示變數在記憶體中的地址

4.2 列表的可變與元組的不可變

列表可改變

元組不可改變

4.3 運算子

1.算術運算子:加減乘除、取餘%、乘方
2.賦值運算子
3.比較(關係)運算子
不只是數字才能做比較運算:

4.邏輯運算子:and(與)、 or(或)、 not(非)
5.成員運算子:in、not in

6.身份運算子:is、not is
如何判斷變數的值、身份與型別?**

  1. == 比較是否相等
  2. is 比較身份是否相等,即比較兩個變數的記憶體地址是否相等,可以用 id() 檢視變數的記憶體地址
  3. isinstance() 比較型別是否相等,不推薦使用 type(a) == int 這種方法,而是使用 isinstance(a, str) 這種方法。而且還可以使用 isinstance(a, (int, str, float)) 判斷a是不是int, str, float中的任意一種。最重要的是type不能判斷變數的子類是否屬於某種型別,但是isinstance可以

ps:物件的三個特徵:id、value、type(分別用is、==、isinstance)
7.位運算子(把數字當做二進位制數進行運算):

&(按位與)
|(按位或)
^(按位異或)
~(按位取反)
<<(左移動)
>>(右移動)

5.包與模組

5.1 Python專案的組織結構

包 → 模組 → 類 → 函式、變數
包相當於資料夾

名稱空間:包名.模組名

如何讓普通資料夾成為包?——必須包含__init__.py檔案

__init__.py檔案本身也是一個模組
包下__init__.py的模組名就是包名

5.2 匯入模組

import匯入模組:

  • import 模組名 as xxx
  • import 包名.模組名 as xxx——print(包名.模組名.變數名)

from import 匯入模組

  • from 包名.模組名 import 變數名
  • from 包名 import 模組名
  • from 包名.模組名 import *

在模組中設定 __all__ = ['a', 'c'] 可以控制 from 包名.模組名 import * 匯入的變數為a和c

5.3 __init__.py的用法
**匯入包時會自動執行 __init__.py 檔案**
在 __init__.py 檔案使用 __all__ = ['c1'] 可以控制匯入的模組為 c1.py

包與模組的幾個常見錯誤:

  • 包和模組是不會被重複匯入的
  • 避免迴圈匯入
  • 匯入模組時Python會自動執行匯入模組裡面的所有程式碼

    5.4 模組內建變數

    dir()函式返回當前模組所有的變數:

    內建變數:
  • name 是模組的完整名稱(包括名稱空間)
  • package 是包名
  • doc 是模組的註釋
  • file 是當前模組在系統裡面的物理路徑

不同的執行:

5.5 入口檔案

入口檔案會導致內建變數的不同

  • 如果一個普通的.py檔案被當作應用程式的入口,那麼它的變數 **__name__** 就不再是本身模組的名稱,而是會被強制更改為 **__main__**
  • 如果一個普通的.py檔案被當作應用程式的入口,那麼它的頂級是不會再有包的如果一個普通的.py檔案被當作應用程式的入口,那麼它的變數 **__file__** 不再是絕對路徑,而是和執行python命名所在目錄有關

    5.6 __name__的經典應用
    使用dir()函式檢視模組或類相關的變數:

Make a script both importable and executable
if __name__ == "__main__":
Python指令碼既可以作為一個普通的模組提供給其它應用程式來呼叫,也可以讓它自己成為一個可執行的檔案。

__name__的經典應用:

使用 python -m 命令將一個可執行檔案當作一個普通的模組:

ps:普通的模組必須要有包

5.7 相對匯入和絕對匯入

決定頂級包的是可執行檔案

絕對匯入(絕對路徑):

  • import 頂級包...中間包...模組名
  • 絕對引入一定要從頂級包開始

相對引入:

  • . 表示當前目錄
  • .. 表示上一級目錄

在入口檔案中不能進行相對匯入
相對路徑之所以能夠找到對應的模組,在於根據內建變數 __name__ 來定位。但是由於 main.py 是入口檔案, __name__ 被強行改成 __main__ ,但是 __main__ 這個模組不存在,所以在入口檔案中不可以使用相對路徑來匯入模組

6.函式

6.1 認識函式

round()函式用於保留幾位小數(自動四捨五入):

如何限制函式遞迴層數:
import sys
sys.setrecursionlimit(1000)

如何讓函式返回多個結果:

  1. 返回元組
  2. 序列解包

    6.2 序列解包與鏈式賦值

    序列解包(數量要相等):

鏈式賦值:
a, b, c = 1, 1, 1改為a=b=c=1

6.3 必須引數、關鍵字引數、預設引數

1.必須引數——形參、實參
形參:

實參:

2.關鍵字引數
不用按必須引數的順序傳遞,隨意順序

3.預設引數

6.4 可變引數、關鍵字可變引數

1.可變引數
必須引數必須放在可變引數前面
可以把預設引數放在可變引數後面,然後利用關鍵字引數傳值
使用*a來解包元組:

2.關鍵字可變引數
傳入任意個數的關鍵字可變的引數:

遍歷字典:items

使用**a來解包字典:

ps:什麼引數都不傳,param 將為空字典

6.5 global關鍵字

global關鍵字:宣告全域性變數