一、軟件安裝,環境准備
- 安裝python3運行環境
- 安裝ipython:
pip install ipython
升級pip:
python -m pip install --upgrade pip
- 安裝PyCharm,激活碼可選購買
二、python 基礎
- 變量
int:整形
float:浮點型
bool:布爾型,True(非0) False(0)
complex:復數型,用於科學計算
非數字型:字符串、列表、元組、字典
- 運算:
+(加) 字符串、列表、元組均支持+合並
–(減)
*(乘) 字符串、列表、元組均支持*進行重復,字典不可以。
**(取方)
/(除)
//(除取整)
%(模)
- Pycharm快捷鍵:
F7、F8 單步執行,
F9 跑完程序,
shift + F9 debug模式運行
ctrl+/ 注釋、取消注釋
- 常用函數:
del 關鍵字刪除變量后,變量不可使用。也可以用來刪除列表中的數據。
type()查看變量類型
print()打印到控制台
input() 獲取輸入
示例:input(“請輸入賬號:”)
str() 轉換為字符串
int() 轉換為整形
float() 轉換為浮點
關鍵字:輸出所有關鍵字
import keyword
print(keyword.kwlist)
pass 關鍵字:占位符,保證程序正常運行,可以進行占位。
示例:if 1==1:
pass
id()查看變量在內存中的地址
- 計算
bool在計算時會轉為數字 True(1),False(0)
字符串 * int = 多個字符串重復
字符串與非字符串之間不能使用其它運算符號
- 邏輯操作符
and 並且
- or 或者
not 非
in 是否在字符串、列表、元組、字典(只判斷key)中
not in 同上,取反
is 內存地址相同判斷
is not 內存地址不相同判斷
>
>=
== 與is的區別在於,比較內存中的值,而不是地址。
!=
<=
<
- 變量的格式化輸出
示例:
yuanzu=(“hello”,19)
printstr=“%s 的年齡是 %d” % yuanzu
print(printstr)
%s 字符串
%d 有符號十進制整數
%06d 按指定6位數顯示的整數,不足的地方使用0補全
%f 浮點數
%.02f表示小數點后只顯示2位
%% 輸出%
示例:print("%s %d %05d %f %.02f %%" % ("哈哈哈",44,44,44.5555,44.555)
結果:哈哈哈 44 00044 44.555500 44.55 %
- 變量函數命名規則:數字、字母、下划線組成,數字不能開頭
- 關鍵字:
import keyword
print(keyword.kwlist)
- 條件判斷:if elif else
- 三大流程:順序、分值、循環
- 注釋
單行注釋:# 單行注釋
多行注釋:“”“注釋內容”“”
文檔注釋:在方法體后第一行
- 列表(數組)
定義:name_list=[數據1,數據2 ]
長度:len(name_list)
增加:insert、append、extend(方法內的參數會拆分成單個字符append到列表中)
刪除:remove(如果參數不存在,則報異常)、clear、pop(彈出並刪除)、del name_list[0]
修改:name_list[0]=數據3
查詢:name_list[0]、count、index(如果參數不存在,則報異常)
遍歷:
for n in name_list:
print(n)
排序:sort(正序),reverse(反序)
刪除列表中的空字符串:
- 元組
定義:(數據1,) (數據1,數據2)
長度:len(name_list)
方法:append、count、index(如果參數不存在,則報異常)
修改:name_list[0]=數據3 元組不能修改,但可以修改元組引用內的數據。
查詢:name_list[0]
遍歷:
for n in name_list:
print(n)
應用場景:
1函數的參數和返回值
2格式字符串,防止修改
3讓列表數據不被修改,更安全
- 元組與list互轉
元組=tuple(列表)
列表=list(元組)
- 字典
定義:dic={key:value,key:value}
鍵必須唯一,且只能為字符串、數字或者元組。無序。
長度:len(dic),統計鍵值對數量
獲取所有的鍵:keys()
獲取所有的值:values()
獲取所有的項:items()
增加:dic[key3]=value3
修改:與增加相同
查詢:dic[key](如果key不存在,則報錯)
刪除:clear、pop(如果key不存在,則報錯)
合並字典:
示例:dic2={key:value,key2:value2}
dic.update(dic2)
注意:update方法會將相同的鍵進行更新,不同的鍵將進行合並。
- 字符串
定義:’單引號或者雙引號’
長度:len()
出現次數:count
出現位置:index
方法分類:
判斷類型:
isspace 只包含空格(\t \n \r)
isalnum 字母或者數字
isalpha 字母
isdecimal全角數字,不能判斷小數
isdigit 全角數字、(1)(unicode字符串)、\u00b2,不能判斷小數
isnumeric isdigit基礎上,包含中文數字(示例:一千零一夜),不能判斷小數
……
查找和替換:
startswith、endswith
find(如果不存在,返回-1)
rfind 從右側開始查找
replace
大小寫轉換:
upper
lower
swapcase
文本對齊:
ljust 左對齊,並使用空格填充至指定長度
rjust 右對齊,並使用空格填充至指定長度
center 居中對齊
去除空白:
lstrip
rstrip
strip
拆分或者拼接
split 默認按照(\r \n \t)和空格拆分
splitlines 按照(\r \n \t)分割,返回包含各行的列表
join 多個字符串鏈接
切片:
字符串[開始索引:結束索引:步長]
倒序索引,從右向左依次遞減 -1,-n
示例:
num=”0123456789”
num[2:6:] #截取2-5 2345
num[2:] #截取2-末尾 23456789
num[0:6]或者num[:6] #截取開始-5 012345
num[:] #截取完整字符串 0123456789
num[::2] #開始-末尾,每隔一個字符截取 02468
num[1::2] #1-末尾,每隔一個字符截取 13579
num[-1] #最后一個字符 9
num[2:-1] #從2開始到倒數第二個 2345678
num[-2:] 從后往前截取89
num[-1::-1] #從后往前截,步長為倒敘 9876543210
- 公共方法
內置函數:
len()
del或者del()
max(),如果是字典,則對key進行比較
min(),同上
- for-else:
for 變量 in 集合:
循環體
else:
沒有通過break退出循環,循環結束后會執行的代碼
- TODO 注釋
# TODO(作者/郵件) 注釋內容
- 重命名變量:定位光標到變量上,按shift+F6改名
- Linux上的shebang符號(#!)
a.使用which python3獲得路徑
b.在啟動文件頂部添加:#! python路徑
c.增加可執行權限 chmod +x 文件路徑
- 函數的調用是傳入內存地址,函數的返回是返回內存地址。
- 局部變量和全局變量
python中不允許直接修改全局變量的值,如果賦值,則會在函數內部定義一個局部變量。
如果要給全局變量賦值,則需要使用global 變量進行顯示申明。
全局變量命名規則,使用g_或者gl_開頭進行命名。
- 方法:可變參數方法定義,*+參數名為元組參數,**+參數名為字典參數
def demo(num,*nums,**person):
print(num)
print(nums)
print(person)
demo(1)
demo(1,2,3,4)
demo(1,2,3,4,name=”小米”)
demo(1,2,3,4,name=”小米”,age=18)//1為第一個參數,2,3,4為第二個參數,后面兩個為第三個參數
元組和字典拆包:上面的demo方法無法直接傳入元組和字典,如果直接傳入,會被當做元組或者字典的一部分。如果要傳入元組,則需要使用拆包的方式。示例代碼:
a=(2,3,4)
b={ name=”小米”,age=18}
demo(1,*a,**b)
三、導入包
- 同項目不同包名導入
- 不同項目引用導入
四、面向對象
- 類和對象的關系
- 類的設計:類(大駝峰命名方法)、屬性(小駝峰命名法)、方法(小駝峰命名法)
- dir()方法查詢類的方法列表
- 類的定義與創建對象的語法
示例:
class 類名:
def 方法():
pass
變量=類名()
- self:類方法可以使用參數self進行對自身的指代。
- _init_方法(對象創建時調用)、_del_方法(對象銷毀前調用)、_str_方法(返回對象的描述信息,print方法會自動調用)
- None關鍵字,相當於其它語言中的null
- 偽私有屬性和私有方法,定義:定義時在前面加上兩個下划線。外部一定要訪問,則可以使用_類名__方法名。
- 繼承語法:class 類名(父類名1,父類名2):多繼承,父類不要有重名方法,應盡量避免使用多繼承。
- 重寫:
定義相同方法名進行覆蓋。
方法1:可以使用super()對父類進行指代和方法調用。只能調用方法。
方法2:使用父類名.方法名進行調用。只能調用方法。
- 私有屬性和方法,子類對象不能直接訪問。
- 類屬性相當於java中的類全局靜態字段。類屬性是描述類的特征,不與具體對象相關。在繼承中,會有一個向上查找機制,先在子類中查找,若找不到,然后在父類中查找。
使用對象名.類屬性賦值,會創建實例屬性。如果使用的子類名,也會創建實例對象。
- 類方法,同java中的類靜態方法。定義,在方法上面加上 @classmethod,方法參數中加上cls,方法類別可以使用cls來指代當前類。
- 靜態方法。如果一個方法不需要訪問類屬性,也不需要訪問對象屬性,則可以定義為靜態方法。
定義,在方法上面加上@staticmethod
- 單例設計模式:
重寫__new__方法
示例代碼:
instance = None def __new__(cls, *args, **kwargs): if cls.instance is None: cls.instance = super().__new__(cls) return cls.instance
- 異常捕獲:
try:
exception 異常類型1:
exception (異常類型2,異常類型3):
exception Exception as result:
print(“未知錯誤:%s” % result)
- 主動拋出異常 raise Exception(“異常”)
五、模塊
- 導入模塊 示例:import 文件名 as 別名,使用方式 別名.類名等
- 導入部分 示例:from 文件名 import 類名,使用方式 直接使用類名等
- 如果從兩個不同的模塊中導入相同的函數,后面的會覆蓋前面導入的函數。
- 模塊導入順序,先從當前文件夾進行搜索,如果沒有,則會從系統模塊中進行導入。所以與系統重名的文件命名會覆蓋系統的模塊。可以使用 模塊名.__file__查看模塊的路徑。
- 文件中的代碼被導入時(import 行),如果沒有縮進,則會都被執行一遍。
- if __name__==”__main__” ,當前文件直接運行,則為true,否則為false。
- 包是一個包含多個模塊的特殊目錄,目錄下有一個特使的文件 __init__.py,報名的命名反射和變量名一致,小寫字母+_組成。需要在 __init__.py中指定對外界提供的模塊列表。
模塊列表示例:from . import 文件名
外部使用示例:
import 包名
包名.模塊名.方法/類名
- 發布模塊(了解即可)
- 創建setup.py文件
- 構建模塊 python setup.py build
- 打包模塊 python setup.py sdist
- 解壓縮模塊 tar zxvf 文件名
- 安裝模塊 python setup.py install
- 導入包名 imoprt 包名
- 安裝模塊 pip install 模塊/包名
- 卸載模塊 pip uninstall 模塊/包名
- pygame 第三方游戲模塊
pip install pygame
六、文件操作
- open()
- read()
- write()
- close()
示例代碼:
file = open("hm_class.py") print(file.read()) file.close() print("over")
- open() 參數說明
r 以只讀方式打開
w 以只寫方式打開,如果文件存在,會覆蓋,如果不存在,則創建。
a 以追加方式打開,文件指針在文件末尾
r+ 讀寫方式打開,文件指針在開頭,如果文件不存在,則報錯
w+ 讀寫方式打開,如果文件存在則覆蓋,不存在,則創建。
a+ 讀寫方式打開,如果文件存在,則指針放在結尾,如果文件不存在,則創建新文件進行寫入。
- readline 讀取一行數據
- 小文件復制
示例代碼:
file_read=open(“”) file_write=open(“”,”w”) file_write.write(file_read.read()) file_read.close() file_write.close()
- 大文件復制
使用部分讀取,部分寫入的方式。
示例代碼:
file = open("","rb") file2 = open("hm_class2.py", "wb") while 1: text = file.read(1024) if not text: break file2.write(text) file.close()
- 文件或者目錄的常用管理操作
- 導入os模塊,實現對文件或者目錄的操作
- rename() 重命名
- remove() 刪除文件
- listdir() 返回當前文件夾下所有的文件夾和文件
- os.path.isdir(“”)判斷是否為文件夾
- mkdir() 創建目錄
- rmdir() 刪除目錄
- getcwd() 獲取當前目錄
- chdir() 修改工作目錄