- 編譯:將源代碼轉換成目標代碼的過程
- 解釋:將源代碼逐條轉換成目標代碼同時逐條運行目標代碼的過程
- c語言是編譯型語言;python是解釋型語言
- Python的特點:語法簡潔;與平台無關;粘性擴展;開源理念;通用靈活;強制可讀;支持中文;模式多樣;類庫豐富
- Python的注釋格式:
- 單行注釋:以#開頭
- 多行注釋:以'''三個單引號來作為開頭和結尾
- Python的變量命名規則:長度沒有限制,允許采用大寫字母、小寫字母、數字、下划線和漢字等字符來給變量命名,但不允許首字符為數字,同時中間不能出現空格。
- 關鍵字
False | None | True | |||
and | as | assert | break | class | continue |
def | del | elif | else | except | finally |
for | from | global | if | import | in |
is | lambda | nonlocal | not | or | pass |
raise | return | try | while |
eval函數(本質為脫最外層引號)
可以使用eval()嵌套input()進行實現輸入需要的類型
input()輸出為str類型
注意“:”的使用(在函數定義,遞歸條件使用的情形下需要使用:)
數據類型(char不是python數據類型)
基本數據類型(整數、浮點數、復數)
int float complex
浮點數最多精確15位
復數x:實部:x.real
虛部:x.imag
//:整數商 輸出數據類型為int
/:商 輸出數據類型為float(xx.x)
**:冪函數(x**y和pow(x,y)意義相同
字符串(輸入輸出、★切片)
字符串定義時可以使用單引號、雙引號和三引號來表示,其中單引號和雙引號為單行字符串,使用單引號時可以將雙引號作為字符串一部分,使用雙引號時可以將單引號作為字符串一部分,三引號可以表示單行或多行,換行時,會在字符串內添加一個元素\n
基本字符串操作
操作符 | 描述 |
x+y | 連接兩個字符串x和y |
x*n或n*x | 復制n次字符串x |
x in s | 如果x為s的子串,返回true;否則返回false |
str[i] | 索引,返回字符串str的第i個元素 |
str[N:M] | 切片,范圍索引第N個元素到第M-1個元素 |
len(x) 返回字符串x的長度,也可以應用在其他組合數據類型中
方法 | 描述 |
str.lower | 返回字符串str的副本,全部字符小寫 |
str.upper | 返回字符串str的副本,全部字符大寫 |
str.split(sep="*",maxsplit=-1) | 返回一個列表,由str被sep分割后的狀態構成,maxsplit默認為-1(全部分割)指定maxsplit=x則最多分割x次 |
str.replace(old,new,count) | 返回字符串str的副本,count未給定,則所有old字符串被替換成new,否則替換前count次 |
str.join(iterable(可迭代類型)) | 返回一個新字符串,由可迭代類型變量iterable中每個元素構成,元素間用str分隔 |
集合:
列表:
元組:
字符串:
int(3.14)== 3
int(9.9)== 9
float(3)== 3.0
表達式取位寬最長的數據類型
★if(0.1+0.2==0.3)
false (float的數據處理)
- pow(x,y,z)=(x**y)%z,其中參數z可以省略
特殊格式化控制字符
\a | 蜂鳴,響鈴 |
\b | 向后退一格 |
\f | 換頁 |
\n | 換行,光標移動到下行首行 |
\r | 回車,光標移動到本行首行 |
\t | 水平制表 |
\v | 垂直制表 |
\0 | NULL,什么都不做 |
- 函數定義(語法形式)
def 函數名():
.....
return 返回值
其中函數名不能是python內的關鍵字,沒有返回值時,函數默認返回None
- 全局變量:
- 作用域:全局作用域
- 生命周期:程序運行期間一直存在
- 局部變量:
- 作用域:局部作用域
- 生命周期:程序運行出局部作用域,變量即被釋放
變量聲明:
1.簡單數據類型變量
(1)簡單數據類型變量無論是否與全局變量重名,僅在函數內部創建和使用,函數退出后變量被釋放,對同名全局變量無影響
(2)簡單數據類型變量在函數中作為全局變量(global)聲明后,該全局變量保留且值受到函數的影響
2.組合數據類型變量
(1)組合數據類型變量若在函數內部沒有真實創建,且有其同名全局變量,則內部可以直接調用並修改全局變量的值
(2)組合數據類型變量若在函數內部真實創建(未真實創建且沒有同名全局變量則報錯),則在函數結束時被釋放,對同名全局變量無影響
(3)組合數據類型變量在函數中作為全局變量(global)聲明后,該全局變量保留且值受到函數的影響
程序控制結構
- 程序的基本結構有三種:
- 順序結構
- 分支結構
- 單分支
- 雙分支
- 循環結構
- 條件循環
- 遍歷循環
循環的使用
分支結構根據條件判斷結果選擇不同的向前執行路徑
循環結構根據條件判斷結果能夠向后反復執行
- 循環保留字:
- break:跳出當前所在的循環,程序從循環后繼續執行
- continue:跳出本次循環,但將繼續遍歷剩余循環列表
- 流程圖的基本元素有:
- 起止框
- 判斷框
- 處理框
- 輸入/輸出框
- 注釋框
- 流向線
- 連接點
遞歸調用(程序題)
1.階乘
其中round()函數作用是四舍五入取最接近的整數
2.字符串反轉
組合數據類型
- 元組、列表、字符串有序
- 集合、字典無序
- 集合符號是{}
- 列表符號是[]
- 元組符號是()
- 字符串是''' ''' 或" "或' '
一、集合類型
```
集合是多個元素的無序組合
集合元素之間無序,每個元素唯一,不可重復
*集合元素不可更改,不能說可變數據類型
```
```
集合用{}表示,元素間用","分隔
建立集合類型用{}或set()
建立空集合類型,必須使用set()
```
操作符(未要求)
操作符 | 描述 |
S|T (並) | S和T內所有元素 |
S-T (差) | 在S但不在T內的元素 |
S&T (交) | 同時在S和T內的元素 |
S^T (補) | S和T內非相同的元素 |
S<=T或S<T | 判斷S和T的子集關系 |
S>=T或S>T | 判斷S和T的包含關系 |
S|=T (並) | 更新S集合 包括S和T內的所有元素 |
S-=T (差) | 更新S集合 在S但不在T內的元素 |
S&=T (交) | 更新S集合 同時在S和T內的元素 |
S^=T (補) | 更新S集合 S和T內非相同的元素 |
處理方法(未要求)
方法 | 描述 |
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為空,產生KeyError異常 |
S.copy() | 返回S的一個副本 |
len(S) | 返回S的元素個數 |
x in S | 判斷S中元素x,在S內返回True,否則返回Flase |
x not in S | 判斷S中元素x,不在S內返回True,否則返回Flase |
set(x) | 將其他類型變量x變為集合類型 |
應用
數據去重:利用集合無重復元素的特點
包含關系比較
二、序列類型
```
序列是一維元素向量,元素類型可以不同
類似數學元素序列:S0,S1,S2……
元素間由序號引導,通過下標訪問序列的特定元素
序列類型是一個基類類型
包含:*字符串類型 *元組類型 *列表類型
```
操作符(未要求)
x in S | 判斷序列S中元素x,在S內返回True,否則返回Flase |
x not in S | 判斷序列S中元素x,不在S內返回True,否則返回Flase |
S+T | 連接兩個序列S和T(S、T必須為同類型) |
S*n或n*S | 將序列s重復n次 |
S[i] | 索引,返回S中第i而元素,i是序列序號 |
S[i:j:k] | 分片,返回S中的第i到j個元素以k為步數的子序列(k默認為1,可省略) |
len(S) | 返回序列S的長度,即元素個數 |
min(S) | 返回序列S的最小元素,元素需可比較 |
max(S) | 返回序列S的最大元素,元素需可比較 |
S.index(x) | 返回序列S第一次出現x的位置 |
S.index(x,i,j) | 返回序列S從i開始到j位置第一次出現x的位置 |
S.count(x) | 返回序列中出現x的總次數 |
應用場景:
```
元組用於元素不改變的應用場景,固定搭配場景
列表更加靈活,是最常用的序列類型
列表的最主要作用:表示一組有序數組,進而進行操作
```
1.元組類型
```
元組是序列類型的一種擴展
元組的一種序列類型,一旦創建不能修改
使用()或tuple()創建,元素間用","分隔
可以使用或不使用()
```
2.列表類型
```
列表是一種序列類型,創建后可以被隨意修改
使用[]或list()創建,元素間用“,”分割
列表中各元素的類型可以不同
```
操作符(**重要)
操作符 | 描述 |
ls[i]=x |
替換列表ls第i元素為x |
ls[i:j]=lt | 用lt替換ls中的第i到j-1個元素 |
ls[i:j:k]=lt | 用列表lt替換ls切片后所對應的元素子列表 |
del ls[i] | 刪除ls的第i元素 |
del ls[i:j:k] | 刪除ls中第i到第j-1以k為步長的元素 |
ls+=lt | 更新ls,將lt元素增加到ls中 |
ls*=n | 更新列表ls,其元素重復n次 |
ls.append(x) | 在列表ls最后增加元素x |
ls.clear | 刪除所有元素 |
ls.copy() | 生產新列表,賦值所有元素 |
ls.insert(i,x) | 在ls第i位置增加元素x |
ls.pop(i) | 將第i元素取出並刪除,默認從列表末尾刪除元素,ls為空時報錯 |
ls.remove(x) | 將ls中出現的第一個x刪除 |
ls.reverse() | 將ls內的元素反轉 |
文件操作:
***必須將程序保存到要打開的文件的路徑
在python shell中必須更改工作目錄,當然在實際程序編寫過程中可以將文件或程序的位置更改
文件讀取方法的區別
操作方法 | 含義 |
<file>.readall() | 讀入整個文件內容,返回一個字符串或字節流* |
<file>.read(size=-1) | 從文件中讀入整個文件內容,若給出size則讀前size長度的字符串或字節流 |
<file>.readline(size=-1) | 從文件中讀入一行內容,若給出size則讀該行前size長度的字符串或字節流 |
<file>.readlines(hint=-1) | 從文件中讀入全部行內容,每行返回一個列表,若給出hint則讀入前hint行的內容 |
<file>.readall()方法似乎在現版本的python不再適用
注意:每次讀取后指針指向最后,需要seek(0)命令回到開始
每次進行文件讀取時需要使用open命令打開文件
在操作完成后需要使用close命令關閉文件,釋放文件的使用授權,不關閉文件句柄則會無法進行文件刪除等操作,同時及時關閉文件能夠避免超出操作系統的限制的問題
第三方庫(選擇):
從數據分析到人工智能 | |||
數據分析 | 數據可視化 | 文本處理 | 機器學習 |
numpy pandas Scipy |
Matplotlib seaborn mayayi |
PyPDF2 NLTK Python-docx |
Sciket-learn TensorFlow MXNet |
從web解析到網絡空間 | |||
網絡爬蟲 | web信息提取 | web網站開發 | 網絡應用開發 |
Requests Scrapy pyspider |
BeautifulSoup Re Python-Goose |
Django Pyramind Flask |
WeRoBot aip MyQR |
從數據分析到人工智能
數據分析:
numpy
pandas
SciPy
數據可視化:
Matplotlib
seaborn
mayavi
文本處理:
PyPDF2(處理pdf)
NLTK(自然語言文本處理)
Python-docx(處理word)
機器學習:
Scikit-learn(最基本最優秀的機器學習之一)
TensorFlow
MXNet(基於神經網絡,自動駕駛、機器翻譯、語音識別)
從web解析到網絡空間
網絡爬蟲:
Requests(最友好,頁面級)
Scrapy(最主要最專業的框架之一)
pyspider(強大的web頁面爬取)
web信息提取:
BeautifulSoup(HTML和XML的解析庫)
Re(正則表達式解析處理)
Python-Goose(提取文章類型)
web網站開發:
Django(最流行web應用框架,MTV模式)
Pyramid(規模適中)
Flask(簡單規模小快速)
規模:Django>Pyramid>Flask
網絡應用開發:
WeRoBot(微信公眾號開發框架)
aip(百度AI開放平台接口)
MyQR(二維碼生成)