python3學習之路-基礎篇
一、官方網站
鏈接:https://www.python.org
中文文檔最新:https://docs.python.org/zh-cn/3.8/c-api/index.html
1、python 3 Readiness
鏈接:http://py3readiness.org/
github:https://github.com/chhantyal/py3readiness
2、python Speed Center
3、pycon
4.python開發工具pyCharm
鏈接:https://www.jetbrains.com/pycharm/download/#section=windows
二、python基礎語法
python保留關鍵字
False | class | finally | is | return | True | continue | for | lambda | try | None |
---|---|---|---|---|---|---|---|---|---|---|
def | from | nonlocal | while | and | del | global | not | with | as | elif |
if | or | yield | assert | else | import | pass | break | except | in | raise |
python模塊的包
import modulel as m #導入模塊並命名變量
from modulel import z #導入模塊中變量
import com.pkg2.hello as module #導入包並命名變量
from com.pkg2.hello import z #導入包中變量
python註釋
1.# 文件註釋和代碼註釋
2.""" “”" 文檔註釋
python變量賦值
y=1
python命名規範
包名 | 全部小寫 | com.pkg.m |
---|---|---|
模塊名 | 全部小寫,多個單詞用_分割 | hello_world |
類名 | 大駝峯 | HelloWorld |
異常名 | 大駝峯 | OsError |
變量名 | 全部小寫,可以_開頭或分割 | _hello,hello_world |
函數名和方法名 | 全部小寫,可以_開頭或分割 | _hello,hello_world |
常量名 | 全部大寫,可用_分割 | HELLO_WORLD |
三、python數據類型
6種標準數據類型:數字,字符串,列表,元組,集合,字典
int | number類型 | 不可變 |
---|---|---|
float | number類型 | 不可變 |
str | number類型 | 不可變 |
bytes | sequence類型 | 不可變 |
bytearray | number類型 | 可變 |
list | number類型 | 可變 |
tuple | number類型 | 不可變 |
dict | mapping類型 | 可變 |
set | set類型 | 可變 |
frozenset | set類型 | 不可變 |
1、整數 int
二進制函數 bin(100)
八進制函數 oct(100)
十六進制函數 hex(100)
十進制函數 int("64",16)
除法運算 3/2 返回浮點數,3//2 返回整數
取模運算 5%2
***注意*** 不支持 數字和非數字比較 如:1 > ""
整數轉換函數:int(100.01)
2、布爾類型 True,False
0,0.0,None,"",list(),tuple(),dict(),set(),frozenset() 數字0,空值,空序列,空字典 在判斷時都爲False,其它的爲True
3、浮點數 float(採用雙精度存儲)
***注意*** 1. 浮點數不能直接比較 如:0.1*3 == 0.3
解決方法:限制精度範圍 如:round(0.1*3,2) == round(0.3,2)
2. 浮點數不能直接進行運算 如:1.1+2.2 == 3.3
解決方案:from decimal import Decimal
Decimal("1.1")+Decimal("2.2")
3.round() 函數先下取整 如:round(1.5) 但是取小數時 有誤差 如 round(1.25,1)
不同類型的數字之間可以 進行加減和比較運算 如:1.1+2,1.1<2,1.1=1
浮點數轉換函數:float(100)
4、字符竄類型 str
轉義符:\t 水平製表符
\n 換行
\r 回車
\" 雙引號
\' 單引號
\\ 反斜槓
原始字符串: s=r'Hello\world'
字符串查找:str.find(syb[,start[,end]]) 從字符左側start到end之間查找字符串sub的位置下標,沒有找到返回-1
str.rfind(syb[,start[,end]]) 從字符右側start到end之間查找字符串sub的位置下標,沒有找到返回-1
字符竄長度函數: len('zifu')
字符竄格式化: "{x} {y}".format(x=100,y=[1,2,3])
字符串轉換函數:str(100)
5、字節數組 bytes
6、內存視圖 bytearray
7、列表 list
創建列表
a=[1,2]
追加元素
a.append(3)
a.extend(4)
插入元素
a.insert(1,5) #在索引1處插入一個5
替換元素
a[1]=6 #在索引1處替換爲6
刪除元素
a.remove(6)
a.pop(1) #刪除索引爲1的數據
其他方法
a.reverse() #倒置列表
a.copy() #複製列表
a.clear() #清空列表
a.index(x[,i[,j]]) #返回x第一次出現的索引
a.count(x) #返回x在中出現的次數
in 判斷元素是否存在列表中 如:2 in [1,2]
列表推導式
x=[a**2 for a in range(10) if a%2 == 0]
8、元祖 tuple
創建元組
a=(1,2)
訪問元組
a[start:end] #取start到end之間的數據
a[start:end:step] #取start到end之間以step位步長的數據
遍歷元組
for item in a:
print(item)
for i,item in enumerate(a):
print('{0}---{1}'.format(i,item))
9、數祖 array
10、字典 dict
創建字典
a=dict(a=1,b=2),{"a":1,"b":2}/{a:1,b:2}
修改字典
a.pop(key[,default]) #刪除字典鍵值爲key的數據
a.popitem() #刪除字典的數據
a.get(key[,default]) #通過鍵值key返回數據
a.items() #返回字典所有鍵值對
a.keys() #返回字典的鍵
a.values() #返回字典的值
遍歷字典
for key in a.keys():
print(key)
for values in a.values():
print(values)
for key,values in a.items():
print('{0}---{1}'.format(key,values))
字典推導式
a=[k for x,v in a.items() if v%2 == 0]
字典不支持加法,乘法,大小等運算,只可比較是否相同
& 交集
| 並集
- 差集
^ 對稱差集
如:a=dict(a=1,b=2)
b=dict(c=3,b=2)
ka=a.keys()
kb=b.keys()
ka & kb #在a、b中同時存在
ka | kb #在a和b中存在
ka - kb #僅在a中存在
ka ^ kb #僅在a或僅在b中出現
11、集合 (可變和不可變)不允許有重複值
創建集合
a=set({1,"a"})/{1,"a"} 可變
a=frozenset(range(3)) 不可變
修改可變集合函數
a.add() #添加元素
a.remove() #刪除元素,不存在拋異常
a.discard() #刪除元素,不存在不拋異常
a.pop() #刪除並返回集合中的刪除的元素
a.clear() #清除集合
遍歷集合
for item in a:
print(item)
for i,item in enumerate(a):
print('{0}---{1}'.format(i,item))
集合推導式
x={a**2 for a in range(10) if a%2 == 0}
集合支持大小,相等運算符
& 交集
| 並集
- 差集
^ 對稱差集
四、python表達式
python註釋:#註釋內容
python幫助:"""幫助信息"""
python賦值:a=b=c=1234
x=1,"abc",[10,20]
s=0
s+=10
a=b=[]
a+=[1,2] #列表直接修改原內容
c=d=()
c+=(1,2) #元祖新建對象
a,b,c="xyz"
a,b,c=[1,2,3]
a,b=[1,2],(3,4)
a,(b,c)=1,[10,20]
a,((b,c),(d,e))=1,[(10,20),"ab"]
a,*b,c=range(5)
a,*b,c=1,2 #*號只能有一個,*號不能單獨出現 如 *a=1,2 或者只能放在列表或元祖內 如 (*a)=1,2
#*號還可用來迭代對象 如:a=(1,2)
[*a]
#*號對於字典展開主鍵,**號展開鍵值 如:d={"a":1,"b":2}
[*d]
{"c":2,**d}
#*號可用於函數調用,將單個對象分解爲多個實參
1、python作用域
g=1
global g #可以引用全局變量
nonlocal #爲外層嵌套函數
2、python運算符
一元運算符
- #取反
二元運算符
+ #加
- #減
* #乘
/ #除
% #取餘
** #冪
// #取除的最大整數
關係運算符
== #等於
!= #不等於
> #大於
< #小於
>= #大於等於
<= #小於等於
邏輯運算符
not #非
and #與
or #或者,可用於簡化默認值設置 如: x=None
y=x or 100
位運算符
~ #位反
& #位與
| #位或
^ #位異或
>> #右移
<< #左移
賦值運算符
+= #加賦值
-= #減賦值
*= #乘賦值
/= #除賦值
%= #取餘賦值
**= #冪賦值
//= #取除最大整數賦值
&= #位與賦值
|= #位或賦值
^= #位異或賦值
<<= #左移賦值
>>= #右移賦值
其他運算符
is/is not #判斷是/否同一對象
in/not in #判斷是/否包含某一元素
三元表達式
X?T:F #當條件X爲真時,返回T,否則返回F
T if X else F #當條件X爲真時,返回T,否則返回F
切片複製指定元素
x=[0,1,2,3,4,5,6]
x[2:5:1] # 2 表示起始位置(默認是0) 5 表示結束位置(不包括結束位置) 1 表示容納最後一個元素(是指間隔幾個元素獲取)
x[:5]
x[2:]
x[:]
x[2:6:2]
x[::2]
x[::-1] #反向步進,全部複製
x[5:2:-1]
x[-2:-5:-1]
del x[2:5] #刪除指定元素
x[2:5]=[100,200] #賦值指定元素
3、python控制流
1、選擇 if elif else
if x>0:
print("+")
elif x<0:
print("-")
else:
print("=")
2、循環 while
while n > 0:
print(n)
n-=1
3、循環for
for i in range(3):
print(i)
3、迭代
for a,b in [(1,2),(3,4)]:
print(a,b)
for i,x in enumerate([1,2,3]):
print(i,x)
4、可選分支for else和 while else
n=3
while n>0:
n-=1
else:
print("over")
for n in range(10):
if n==3
break
else
print("over")
5.break和continue
break:跳出循環
cintinue:結束本次循環,繼續下次循環
3、python推導式
列表:[x for x in range(5)]
字典:{k:v for k,v in zip("abc",range(10,13))}
嵌套: [f"{x}{y}" for x in "abc" if x!="c" for y in range(3) if y!=0]
生成器:(x for x in range(3))
五、python函數
創建函數
def add(a,b): #a可以寫爲 *a:表示可以傳元組,**a:表示可以傳字典
c=a+b
d=a*b
def sub(a,b): #可以在函數中嵌套使用
return a-b
if a > 0:
return sub(c,d)
else:
return c/(c,d) #可有多個返回值
執行函數
add(1,2)
lambda表達式(匿名函數,不用使用return返回)
lambda 參數列表:lambda體
c=lambda a,b:(a+b)
基礎函數
filter(function,iterable) #可以對iterable對象過濾,function:函數,iterable可迭代對象
map(function,iterable) #可以對iterable對象變換
reduce(function,iterable[,initializer]) #將多個數據按照指定算法積累疊加起來,返回一個數據 #
六、python模塊
import sys #引入系統模塊
from sys import version #引入模塊內函數
import lib.demo #引入包內模塊
from lib import * #引入包內所有模塊
dir()
七、python類
python類具有封裝、繼承和多態的特性
python包含了構造方法(用__init__聲明),實例方法(和變量聲明一樣),類方法(用@classmethod聲明),靜態方法(用@staticmethod聲明)
聲明類
class A:
a=100 #類字段
def __init__(self,x): #實例初始化方法
self.x=x #實例字段
def get_x(self): #實例方法
return self.x
繼承父類
class B(A): #繼承自A
b="hello"
def __init__(self,x,y):
super().__init__(x) #調用父類的初始化方法
self.y=y
def get_y(self):
return self.y
多繼承父類
class X(A,B):pass #多繼承
調用類
o=B(1,2)
父子類型檢查
issubclass(class,classinfo) #檢查class是否是classinfo的子類
isinstance(class,classinfo) #檢查class是否是classinfo的子類
__new__ :構造方法,創建對象實例
__init__:初始化方法,設置實例的相關屬性
__del__:析構方法,實例被回收時調用
**python 支持封裝,繼承和多態**
擴展object類:python的原始類
擁有的方法:
__str__() :返回該對象的字符串表示
__eq__(other) :指其他對象是否與此對象相等
擴展枚舉類定義:
import enum
class 枚舉類名 (enum.Enum):
枚舉類常量
八、python異常
常見異常
AttributeError | 類成員變量異常 |
---|---|
OsError | 操作系統異常 |
IndexError | 索引異常 |
KeyError | 鍵值異常 |
NameError | 變量聲明異常 |
TypeError | 數據類型異常 |
ValueError | 傳參異常 |
def test(n):
try: #需要保護的代碼塊
print("try")
if not n: rasie Exception
except: #異常發生時,按所屬類型捕捉並處理
print("except")
else: #異常未發生時執行,但最少有一個except語句
print("else")
finally: #無論異常是否發生,總是執行
print("finally")
九、python常用模塊
1.math模塊
引用:import math
函數:
math.ceil() #向上取整
math.floor() #向下取整
round() #四捨五入取整
math.log(a[,b]) #返回b爲底的a的對數,省略b,返回a的自然對數
math.sqrt(a) #返回a的平方根
math.pow(a,b) #返回a的b次冪的值
math.sin(a) #返回a的三角正弦
math.cos(a) #返回a的三角餘弦
math.tan(a) #返回a的三角正切
math.asin(a) #返回a的反正弦
math.acos(a) #返回a的反餘弦
math.atan(a) #返回a的反正切
math.dereees(a) #將弧度a轉換爲角度
math.radians(a) #將角度a轉換爲弧度
2.random模塊
引用:import random
函數:
random.random() #返回0~1之間的浮點數
random.randrange(n) #返回0~n之間的隨機整數
random.randint(a,b) #返回a~b之間的隨機整數
3.datetime模塊
引用:import datetime
函數:
datetime.datetime(year,month,day,hour=0,minute=0,second=0,microsecond=0) #創建日期
datetime.date(year,month,day) #創建日期
datetime.date.today() #當天日期
datetime.date.fromtimestamp(timestamp) #timestamp時間戳對應的日期
datetime.time(hour=0,minute=0,second=0,microsecond=0,tzinfo=None) #當天的時間
datetime.timedelta(days=0,second=0,microseconds=0,milliseconds=0,minutes=0,hours=0,weeks=0)#日期計算
datetime.strptime()/datetime.strftime() #格式化日期
datetime.timezone(offset,name=None) #時區
日期格式化控制符
%m: 兩位的月份
%y: 兩位的年份
%Y: 四位的年份
%d: 每月中的日期
%H: 24小時制的兩位小時
%I: 12小時制的兩位小時
%p: AM或PM
%M: 兩位的分鐘
%S: 兩位的秒數
%f: 六位數的微妙
%z: +HHMM形式的時區
%Z: 時區名稱
示例:
import datetime
d=datetime.datetime.today()
d.strftime('%Y-%m-%d %H:%M:%S')
4.logging模塊
引用:import logging
函數:
logging.debug() #返回調試信息
logging.info() #返回節點信息
logging.warning() #錯誤的警告
logging.error() #嚴重錯誤
logging.critical() #嚴重錯誤
十、python文件操作與管理
1.打開文件
方法:
open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)
參數:
file:要打開的文件路徑
mode:r(只讀)/w(覆蓋文件內容)/x(文件不存在時創建並寫入,存在返回異常fileExistsError/a(在文件末尾追加寫入)/b(二進制模式)/t(文本模式,默認)/+(更新模式,必須與rwxa組合使用,如r+,a+,w+)
buffering:緩衝區,0爲關閉緩衝區,>0爲設置緩衝區字節大小,-1爲自動設置
encoding:文件編碼
errors:編碼錯誤是如何處理
newline:設置換行模式
closefd:關閉文件
opener:打開文件執行函數
示例:
f = open('text.txt','w+')
f.write('Hello World') #創建文件並寫入
2.關閉文件
close()
3.文本文件讀寫
read(size=-1) #讀取字符 size:字符數
readline(size=-1) #讀取單行字符串 size:字符數
readlines(hint=-1) #讀取文件到一個字符串列表中,每行數據是列表的一個元素 hint:行數
write(s) #將字符竄寫入文件
writelines(lines) #向文件寫入一個列表
flush() #刷新緩存區
4.os模塊
引用:import os
函數方法:
os.rename(src,dst) #修改文件名,src(源文件),dst(目標文件)
os.remove(path) #刪除path所指的文件,如path是目錄,返回OSError
os.mkdir(path) #創建path所指的目錄,如目錄已存在,返回FileExistsError
os.rmdir(path) #刪除path所指的目錄,如目錄非空,返回OSError
os.walk(top) #遍歷top所指的目錄樹,返回三元數組 (目錄路徑,目錄名列表,文件名列表)
os.listdir(dir) #列出指定目錄中的文件和子目錄
屬性:
os.curdir #當前目錄
os.pardir #當前父目錄
5.os.path模塊
引用:import os.path
函數和方法:
os.path.abspath(path) #返回絕對路徑
os.path.basename(path) #返回目錄名或文件名
os.path.dirname(path) #返回目錄部分
os.path.exists(path) #判斷文件是否存在
os.path.isfile(path) #判斷是否是文件
os.path.isdir(path) #判斷是否是目錄
os.path.getatime(path) #返回最後一次訪問時間(數值是時間戳),不存在返回OSError
os.path.getmtime(path) #返回最後修改時間,不存在返回OSError
os.path.getctime(path) #返回創建時間,不存在返回OSError
os.path.getsize(path) #返回文件大小,不存在返回OSError