python--前進快速的程式語言知識點提要
python一般用於人工智慧,我在學習它是觀看的是百度AI文件,感興趣的可以看看
python
11.21
2.X和3.X 2.X:使用者更多一些,穩定,第三方庫
python 語法優雅、簡潔、快速。。。
python解析器 cpython jpython ipython pipi。。。。。。
python
互動式:輸入立即得到輸出可以重複使用
執行指令碼:直接執行一個指令碼不提供再次輸入能力
ide:
python資料型別
int、long、flout、double、字串
字串:
單引號''
雙引號""
三引號''' ''' 或 """ """
字串連線 + 挨著
獲取單獨字元 變數名[索引] 索引也可以使負數代表從右開始 最後一是-1
切片(獲取子串)變數名[start:end]
start表開始位置(包括)預設值是0
end表示結束位置(不包括)預設值是字串長度
如果end < start 返回空串
列表list(類似java中list)
索引切片同字串一行,字串不可變 list裡面的元素可變
if
elif
else
用法和java一樣
for
Python 中的 for 語句和 C 或 Pascal 中的略有不同。
通常的迴圈可能會依據一個等差數值步進過程(如 Pascal),
或由使用者來定義迭代步驟和中止條件(如 C ),
Python 的 for 語句依據任意序列(連結串列或字串)中的子項,
按它們在序列中的順序來進行迭代
for 變數名 in 一般是集合或字串或等差數列
range()
生成一個等差級數連結串列
range(10) 生成一個0-9的數列
range(5, 10) 生成一個從5開始到9(包含)結束
range(0, 10, 3) 第一個引數起始位置 第二引數終止為止 第三個引數步進值
break 語句和 C 中的類似,用於跳出最近的一級 for 或 while 迴圈。
迴圈可以有一個 else 子句;
它在迴圈迭代完整個列表 (對於 for) 後或執行條件為 false (對於 while) 時執行,
但迴圈被 break 中止的情況下不會執行。
pass 語句什麼也不做。它用於那些語法上必須要有什麼語句,但程式什麼也不做的場合
11.22
定義函式
使用關鍵字def後面加函式名加引數列表加:然後換行縮排函式體
有return代表有返回值,沒有return代表返回
預設引數
定義方法是使用 形參=值 的方式定義引數的預設值
呼叫方法時如果不寫引數使用預設引數值 必要引數一定放在前面
關鍵字引數:
通過形參指定賦值的引數
可變引數列表類似java
Lambda 表示式:
面向函式程式設計的重要特徵之一
可以建立短小的匿名函式
文件字串
類似於java javadoc
給類或者函式進行說明(通常也用作範圍/多行註釋)
列表
append追加到最後
extend把一個列表追加到最後
insert插入指定位置的元素
remove刪除指定元素
pop 沒有引數刪除最後一個元素並返回, 有引數 刪除指定位置的元素並返回
index查詢指定元素返回索引位置
count統計指定元素出現的次數
sort對連結串列中的元素就地進行排序(引數可以用來自定義排序方法,參考 sorted() 的更詳細的解釋)。
reverce反轉列表
filter
filter(function, sequence) 返回一個 sequence(序列),
包括了給定序列中所有呼叫 function(item) 後返回值為 true 的元素(如果可能的話,會返回相同的型別)
map
map(function, sequence) 為每一個元素依次呼叫 function(item) 並將返回值組成一個連結串列返回
reduce
reduce(function, sequence) 返回一個單值,它是這樣構造的:
首先以序列的前兩個元素呼叫函式 function,再以返回值和第三個引數呼叫,依次執行下去
列表推導式
詳情見 python入門指南 5.1.4章節
del
刪除列表元素按照索引
可以刪除一個元素也可以刪除一個切片也可以清空整個列表
元組
標準序列型別
不可變 個數 元素
一個元組由數個逗號分隔的值組成
一個特殊的問題是構造包含零個或一個元素的元組:為了適應這種情況,
語法上有一些額外的改變。一對空的括號可以建立空元組;
要建立一個單元素元組可以在值後面跟一個逗號
(在括號中放入一個單值不夠明確)。醜陋,但是有效
x, y, z = t
這個呼叫等號右邊可以是任何線性序列,稱之為 序列拆封 非常恰當。
序列拆封要求左側的變數數目與序列的元素個數相同。
要注意的是可變引數(multiple assignment)其實只是元組封裝和序列拆封的一個結合。
集合
集合是一個無序不重複元素的集
基本功能包括關係測試和消除重複元素
集合物件還支援 union(聯合),intersection(交),difference(差)和 sysmmetric difference(對稱差集)等數學運算
建立空集合set()
字典(類似java中map)
字典以 關鍵字 為索引,關鍵字可以是任意不可變型別,通常用字串或數值
建立空字典{}
dict() 建立字典
dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
dict(sape=4139, guido=4127, jack=4098)
迴圈技巧
enumerate()
可以同時得到索引位置和值的方法
zip()
同時遍歷多個序列
reversed()
逆向迴圈序列
sorted()
不改變原來序列的前提下排序返回新的序列
iteritems()
字典的方法---》呼叫後可以同時得到K,V
條件控制
比較操作可以傳遞
例如 a < b == c 判斷是否 a 小於 b 並且 b 等於 c 。
and(與or比優先順序相對較高) or 短路效果 not 優先順序最高的
可以把比較或其它邏輯表示式的返回值賦給一個變數(非0(非空)為真)
不同型別可以比較 按照型別英文字母排序
模組
模組是包括 Python 定義和宣告的檔案
import 模組名
form 模組名 import 方法(類、其他屬性、*)
模組名.方法
模組的搜尋路徑
輸入指令碼的目錄(當前目錄)。
環境變數 PYTHONPATH 表示的目錄列表中搜索(這和 shell 變數 PATH 具有一樣的語法,即一系列目錄名的列表)。
Python 預設安裝路徑中搜索。
包
包通常是使用用“圓點模組名”的結構化模組名稱空間
python中以是否有__init__.py來區分是包還是普通資料夾
11.23.2018輸出格式化
str()和repr()
str.rjust(站幾位) 方法的演示,它把字串輸出到一列,並通過向左側填充空格來使其右對齊。
類似的方法還有 str.ljust() 和 str.center()
str.format參照 Format String Syntax。python入門指南7.1章節
print 'We are the {} who say "{}!"'.format('knights', 'Ni')
檔案的讀寫
函式 open() 返回檔案物件,通常的用法需要兩個引數:open(filename, mode)。
第二個引數是由有限的字母組成的字串,描述了檔案將會被如何使用。
可選的 模式 有:'r',此選項使檔案只讀;'w',此選項使檔案只寫
(對於同名檔案,該操作使原有檔案被覆蓋);'a',此選項以追加方式開啟檔案;'r+',
此選項以讀寫方式開啟檔案;模式引數是可選的。如果沒有指定,預設為 'r' 模式。
獲取檔案物件後的操作
read讀
readline讀取一行
readlines讀取多行
write寫
tell返回指標位置
seek移動指標
close關閉檔案物件
with open('/tmp/workfile', 'r') as f: 相當於獲取檔案物件並帶有異常處理
JSON(JavaScript Object Notation)
標準模組 json 可以接受 Python 資料結構,並將它們轉換為字串表示形式;此過程稱為 序列化。
從字串表示形式重新構建資料結構稱為 反序列化
json.dump(資料, 檔案)
變數 = json.load(檔案)
錯誤和異常
語法錯誤
所寫的語句不符合python的語法規範
異常
執行期檢測到的錯誤稱為 異常
異常處理:
try:
可能出現異常的語句
except 要捕獲的異常型別:
捕獲異常後做的處理
丟擲異常
raise
使用者自定義異常
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
定義清理行為
finally:無論是否有異常都執行
預定義清理行為
with
類
類繼承機制允許多重繼承,派生類可以覆蓋(override)基類中的任何方法或類,
可以使用相同的方法名稱呼叫基類的方法
名稱空間 是從命名到物件的對映
多繼承
class 類名(父類)
class 類名(父類1,父類2,父類3。。。。)
私有變數和類本地應用
Python 中不存在私有變數
以一個下劃線開頭的命名(例如 _spam )會被處理為 API 的非公開部分
迭代器(for)
定義一個 __iter__() 方法,使其返回一個帶有 next() 方法的物件。
如果這個類已經定義了 next(),那麼 __iter__() 只需要返回 self
生成器
Generator 是建立迭代器的簡單而強大的工具
def reverse(data):
for index in range(len(data)-1, -1, -1):
yield data[index]
生成器表示式
類似於列表推導式
11.26
作業系統介面
os
shutil
數學
math
random
網際網路訪問
urllib2
時間和日期
datetime
效能度量
timeit
profile
pstats
多執行緒
執行緒是一個分離無順序依賴關係任務的技術。在某些任務運行於後臺的時候應用程式會變得遲緩,
執行緒可以提升其速度。一個有關的用途是在 I/O 的同時其它執行緒可以平行計算。
多執行緒應用程式的主要挑戰是協調執行緒,諸如執行緒間共享資料或其它資源。為了達到那個目的,
執行緒模組提供了許多同步化的原生支援,包括:鎖,事件,條件變數和訊號燈。
re
將正則表示式編譯成 Pattern 物件
pattern = re.compile(r'正則表示式')
Pattern 物件的一些常用方法主要有:
match 方法:從起始位置開始查詢,一次匹配
search 方法:從任何位置開始查詢,一次匹配
findall 方法:全部匹配,返回列表
finditer 方法:全部匹配,返回迭代器
split 方法:分割字串,返回列表
sub 方法:替換
匹配中文
中文的 unicode 編碼範圍 主要在 [u4e00-u9fa5]
re.compile(ur'[\u4e00-\u9fa5]+')
貪婪模式與非貪婪模式
貪婪模式:在整個表示式匹配成功的前提下,儘可能多的匹配 ( * );
非貪婪模式:在整個表示式匹配成功的前提下,儘可能少的匹配 ( ? );
# -*- coding: UTF-8 -*-
class Emp:
def __init__(self, num, name, age, sex, sale):
self.num = num
self.name = name
self.age = age
self.sex = sex
self.sale = sale
def __str__(self):
return "工號:" + self.num + "---姓名:"+ self.name
# -*- coding: UTF-8 -*-
from Emp import Emp
import json
arr = []
with open("d://123.txt", "r") as empfile:
if empfile.read() != "":
empfile.seek(0)
arr = json.load(empfile)
while True:
print("""--------------
1、員工錄入
2、查詢員工資訊
3、修改員工資訊
4、刪除
5、根據工號檢視
6、退出""")
cho = int(raw_input("請輸入您的選擇"))
if cho == 1:
num = raw_input("請輸入工號")
name = raw_input("請輸入姓名")
age = raw_input("請輸入年齡")
sex = raw_input("請輸入性別")
sale = raw_input("請輸入工資")
#emp = Emp(num, name, age, sex, sale)
emp = {"num":num, "name":name, "age":age, "sex":sex, "sale" :sale}
arr.append(emp)
elif cho == 2:
for x in arr:
print x
elif cho == 3:
num = raw_input("請輸入工號")
name = raw_input("請輸入姓名")
age = raw_input("請輸入年齡")
sex = raw_input("請輸入性別")
sale = raw_input("請輸入工資")
for x in arr:
if x["num"] == num:
x["name"] =name
x["age"] = age
x["sex"] = sex
x["sale"] = sale
elif cho == 4:
num = raw_input("請輸入工號")
for x in arr:
if x["num"] == num:
arr.remove(x)
break
elif cho == 5:
num = raw_input("請輸入工號")
for x in arr:
if x["num"] == num:
print x
elif cho == 6:
with open("d://123.txt", "w") as empfile:
json.dump(arr, empfile)
break