python基础复习
生活随笔
收集整理的這篇文章主要介紹了
python基础复习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基本數據類型
int 整數 str 字符串 bool 布爾值 bool True False list 列表 [] tuple 元組 () dict 字典 {key:value} set 集合 不重復 type() 查看基本數據類型切片
切片默認是從左往右切,但是步長為- 可以改變方向 步長 s[0:4:-1] //- 表示反方向 s[0:6:2] //每兩個切一個,切前面的那個占位
"我是{name},{age},{sex}".format(name="zhangsan",age="12",sex="wangwu") len() 長度迭代
for c in arr:pinrt(c)列表的增刪改查
arr.append("") insert(1,"lisi") # 指定位置增加 arr.extend(['a','b','v']) # 迭代添加 在后面添加 pop(1) remove("李四") del list[1:3] clear [1::2] count("李四") 查詢的次數 sort() // sort(reverse=True) 降序 reverse() len() 長度元組
(,) 只讀 (增刪改都不可以) 元組是可迭代對象 查(可以) arr[2] 但是元組的二層是列表是可變的 tu=(1,'s','how are you',[]) tu[-1].append('x')range 可迭代對象
for i in range(n):print(i) # 0到n-1 跟切片一個道理字典 {}
dic={'name':'張三','age':'lisi'} 增 dic['sex']='xxx' dic.setdefault(key,value)#如果沒有這個key就增加,有就不改變原來的 刪pop dic.pop('name')del del dic['name']clear dic.clear()popitem() dic.popitem() 隨機刪除 返回一個 元組 改dic['name']='xxx'dic.update(dic1) 更新 查for循環 dic = {'name': 'zhangsan', 'age': 12}for i in dic:print(i) # for循環默認拿到字典的鍵get()dic.get() # 沒有返回 Nonedic['names'] 沒有這個鍵的時候查詢會報錯keys() 拿到的是高仿列表 values() 也是拿到的高仿列表items() 拿到高仿列表的元組dic = {'name': 'zhangsan', 'age': 12}for key,value in dic.items():print(key,value)fromkeys (返回的是一個新的字典)dict1=dict.formkeys([1,2,3],['one','two','three'])# {1: ['one', 'two', 'three'], 2: ['one', 'two', 'three'], 3: ['one', 'two', 'three']}dict1 = dict.fromkeys([1, 2, 3], 'xxx')# {1: 'xxx', 2: 'xxx', 3: 'xxx'}結構 a,b=1,2 a,b=b,a [a,b]=[b,a]is ==
is 比較內存地址 id() == 比較值小數據池 數字 -5到256 字符串不能包含特別符號 + - * / @等 (注意pycharm所有的字符串一般都是一樣的內存地址)單個字符*20以內的內存地址保持一致 python3 使用的是 unicode pycharm 存儲的時候默認是utf-8編碼 encode 解碼 decodeset 集合
特點: 無序 不重復 可hash(不可變) arr={'name','age','sex'} append 增 arr.add('lisi') froaenset() 凍結的集合 copy() 淺拷貝 [:] 深拷貝import copycopy.deepcopy(list1)文件操作
操作函數open(文件路徑,mode="?",encoding="字符集") //utf-8 模式: r w a r+ a+ rb wb ab例子f = open('./91.js', mode='r', encoding="UTF-8")s = f.read()print(s)f.close()readline() 讀一行 f.flush() 緩沖 f.write() 寫 f.close() 關閉如果mode里面有b 就不能寫 encoding # r+ 比較常用 默認的先讀后寫 # seek(偏移量,位置) 光標移動 seek(0) 移動到開頭 seek(0,2) 末尾with open('./91.js', mode='r+', encoding="utf-8") as f1:for line in f1:print(line)文件修改 with open('./aaa.txt', mode='r', encoding="utf-8") as f1, \open('./91_1.js', mode='w', encoding='utf-8') as f2:for line in f1:print(line)if line.strip() == 'console.log(a[1]);':f2.write('+')f2.write(line) os.remove('aaa.txt') os.rename('91_1.js', 'aaa.txt')函數
def xx():return 'x' xx() 順序位置參數> *args,默認值參數,**kwargs(關鍵字參數)def fun(a, *args, c='哈哈哈', **kwargs):fun(1, 2, 3, 4, 5, c='lisi', d='wangwu', f='zhangsi')# 1 (2, 3, 4, 5) lisi {'d': 'wangwu', 'f': 'zhangsi'} globals() 全局作用域 locals() 查看當前作用域的內容global 在局部訪問全局中的內容 nonlocal 尋找外層函數中離他最近的那個變量def func(*args):print(args) func(*[1,2,3,4,5],*"我是一個字符串") # (1, 2, 3, 4, 5, '我', '是', '一', '個', '字', '符', '串') max([1,2,3,3,4]) min([12,3,4,4,5])__iter__() 獲取迭代器 __next__()s = 'abcdedg'it = s.__iter__() # 獲取迭代器while 1:try:print(it.__next__())except StopIteration: #處理錯誤break 迭代器的特點* 只能向前,惰性機制,省內存枚舉 enumerate() for (i,item) in enumerate(arr):print(i, item) 字典的操作 dic = {'name': 'zhangsan', 'age': 12} for k,v in dic.items():print(k, v)生成器
def func():print('我是一個段')yield 123print('我是第二段')yield 456print('第三段')yield 789 g=func() #生成器 print(g.__next__())//send()的理解 def generator():while True:receive=yield 1print('上一個的值'+str(receive)) g=generator() next(g) g.send(111) g.send(333) 把 yield 1視為一個表達式 要next() 執行一次后才能使用send(),send()接受上一個 yield 1的結果推導式
str=[1,2,3,4,4,5] for i in range(len(str)):str[i]推導式的語言
[ 結果 for循環 判斷 ]
lst =[i for i in range(100) if i%2==1] print(lst)字典推導式
{k:v for循環 條件}
dic={'name':'zhangsan','age':'lisi','sex':"xxx"} d={v:k for k,v in dic.items()} print(d)集合推導式
s={el for el in list}生成器表達式(沒有元組推導式因為不能迭代)
tu=(i for i in range(10)) tu.__next__() tu.__next__()內置函數
iter() #內部封裝的就是__iter__ next() #__next__ int() float() min() max() sum() lst[slice(1, 3, 2)]repr 原樣輸出 format(3,'b') 轉換成2進制 r"nihao\n\tksks" 原樣輸出 zip() 水桶效應有短板a=1,2 print(a)# 這是元組lambda 匿名函數語法: lambda 參數: 返回值__name__ 查看函數的名字a=lambda n:n*nlambda x,y:(x,y) # 如果不加括號就是一個元組print(a(8))map 映射函數sorted 排序
arr = [1, 2, 3, 6, 673, 3, 2, 2, 3, 3] s = sorted(arr) print(s) # 升序sorted(iterable, key=None, reverse=False) 默認升序 s=[('a', 1), ('b', 2), ('c', 6), ('d', 4), ('e', 3)] sorted(s,key=lambda x:x[0])filter 過濾
s = [1, 2, 3, 4, 4, 5, 6, 7] filter(function,lterable) # 第一個參數是一個函數,第二個參數是一個可迭代對象 p=filter(lambda x:x>3,s) print(list(p))map 映射函數
s = [1, 2, 3, 4, 4, 5, 6, 7] p=map(lambda x:x*x,s) # 第一個參數是一個函數,第二個參數是一個可迭代對象 print(list(p))re模塊
模塊就是跟我們提供的功能 re模塊:在python中使用正則表達式正則的用途 # 從大段的文字中找到符合規則的內容 * 爬蟲:從網頁的字符串獲取你想要的數據* 日志分析 # 判斷某個字符串是否完全符合規則* 表單驗證 > 只和字符串打交道字符組: [] * [0-9] [a-z] [A-Z]元字符* \ 轉移字符* \w 單詞 [a-zA-Z0-9_]* \d 數字 [0-9]* \s 匹配所有的空白符 \n \t(制表符)* \b 單詞的邊界* ^ 配置字符串的開始* $ 配置字符串的結束* . 匹配除了換行符之外的所有字符* [] 只要[出現]在中括號內的* [^] 只要[不出現]在中括號的* a|b 符合a規則的或b規則的(如果a規則是b規則的一部分,且a規則要苛刻一些,就把a規則寫在前面)(將更復雜的更長的寫在前面)* () 分組 量詞* {n} 出現n次* {n,} 至少出現n次* {n,m} 出現n到m次* ? 出現0到1次* + 出現1到多次* * 出現0到多次正則表達式的匹配特點:貪婪匹配(回溯算法) 簡單的說就是在允許的范圍內去最長的結果 非貪婪匹配/惰性匹配: 在量詞后面加上?> .*x 貪婪 匹配到最后一個x停止(回溯算法)> .*?x 惰性 匹配任意非換行字符任意長度,只要匹配到第一個x就停止了 原樣輸出r'\nssss\t' 書: <<正則指引>>查找
import refindall :匹配所有每一項都是列表中的一個元素ret=re.findall('\d+','zheshi 123fkafkk23f四大皆空233')print(ret) # ['123', '23', '233'] search : 只匹配從左到右的第一個(常用)# 如果沒有匹配到會返回None,但是使用group會報錯ret=re.search('\d+','sksj123按照花費fdkk123')if ret:print(ret.group()) # 通過ret.group() 獲取真正的結果match :從頭到尾匹配,相當于 search中的正則表達式加上一個^split切割ret=re.split('\d+','alex12fwjek12fjka44')print(ret) # ['alex', 'fwjek', 'fjka', '']sub 正則,舊的,新的,替換次數(默認一次)ret=re.sub('\d+','H','alekxk823fjkfjak12fajk12',2)print(ret) # alekxkHfjkfjakHfajk12subn 返回一個元組,返回第二個元素是替換的次數ret=re.subn('\d+','H','alekxk823fjkfjak12fajk12')print(ret) # ('alekxkHfjkfjakHfajkH', 3)re模塊的進階(時間\空間)
compile 節省使用正則表達式解決問題的時間 # 在多次使用的過程中,不會多次編譯 # 編譯一個正則表達式,用這個結果去search, match,findall,finditer能夠節省空間ret=re.compile('\d+') # 已經編譯了res=ret.findall('adkfj1212fjkajf1212djfk12')print(res) # 返回的結果跟之前一樣但是節省了時間finditer 節省你使用正則表達式解決問題的空間/內存 # 返回一個迭代器,所有的結果都在這個迭代器中,需要循環+group的新式取值ret = re.finditer('\d+', 'alex122fdkajfk122fkjak1221')for i in ret:print(i.group())分組
s = '<a>wah32aha</a>' ret = re.search('<(\w+)>(\w+)</(\w+)>', s) print(ret.group()) #所有的結果 print(ret.group(1)) # 數字參數代表的是取對應分組中的內容 # a print(ret.group(2)) # wah32aha print(ret.group(3)) # a# 為了findall順利取到分組中的內容,()可以優先顯示分組中的內容 ret=re.findall('>(\w+)<',s) # 取消分組優先(?:正則表達式) ret=re.findall('\d+(?:\.\d+)?','1.234*4.3') print(ret) # ['1.234', '4.3']random 模塊
import random取隨機小數 random.random() #取0到1之間的小數 random.uniform(1,2) # 取1-2之間的小數取隨機整數(彩票,抽獎) random.randint(1,2) #[1,2] random.rangrange(1,2) #[1,2)從列表中隨機抽取值(抽獎) l=['a','b','v',(1,2)] print(random.choice(l)) # 第二個參數是接收隨機的個數 print(random.sample(l, 2))打亂一個列表的順序,在原列表的基礎上直接進行修改,節省空間 random.shuffle(l)強轉成字符 chr(81) # Qtime時間模塊
time.time() 時間戳(1970/01/01/00:00:00) print(time.strftime('%Y-%m-%d %H:%M:%S')) 當前格式化時間 #%Y-%m-%d %H:%M:%S 記憶下來 print(time.localtime()) # 結構化時間 # 時間戳->結構化時間->格式化時間 print(time.strftime('%y-%m-%d %H:%M:%S', time.localtime(time.time()))) # 格式化時間->結構化時間->時間戳 print(time.mktime(time.strptime('2018-08-08', '%Y-%m-%d')))sys模塊
sys 是和python解釋器打交道的 在命令行執行python文件,而不是在pycharm中執行 sys.argv 文件名:整個文件路徑不能有空格,不支持中文 sys.argv=['python文件的路徑','參數1','參數2'] 好處是不需要在程序中以input的形式輸入 sys.path 里面放的是文件夾的絕對路徑 sys.modulesos模塊
資料
os模塊是與操作系統交互的一個接口 os.makedirs('dirname1/dirname2') 可生成多層遞歸目錄 os.removedirs('dirname1') 若目錄為空,則刪除,并遞歸到上一級目錄,如若也為空,則刪除,依此類推 os.mkdir('dirname') 生成單級目錄;相當于shell中mkdir dirname os.rmdir('dirname') 刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當于shell中rmdir dirname os.listdir('dirname') 列出指定目錄下的所有文件和子目錄,包括隱藏文件,并以列表方式打印 os.remove() 刪除一個文件 os.rename("oldname","newname") 重命名文件/目錄 os.stat('path/filename') 獲取文件/目錄信息os.system("bash command") 運行shell命令,直接顯示 os.popen("bash command).read() 運行shell命令,獲取執行結果 os.getcwd() 獲取當前工作目錄,即當前python腳本工作的目錄路徑 os.chdir("dirname") 改變當前腳本工作目錄;相當于shell下cdos.path os.path.abspath(path) 返回path規范化的絕對路徑 os.path.split(path) 將path分割成目錄和文件名二元組返回 os.path.dirname(path) 返回path的目錄。其實就是os.path.split(path)的第一個元素 os.path.basename(path) 返回path最后的文件名。如何path以/或\結尾,那么就會返回空值。即os.path.split(path)的第二個元素 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False os.path.isabs(path) 如果path是絕對路徑,返回True os.path.isfile(path) 如果path是一個存在的文件,返回True。否則返回False os.path.isdir(path) 如果path是一個存在的目錄,則返回True。否則返回False os.path.join(path1[, path2[, ...]]) 將多個路徑組合后返回,第一個絕對路徑之前的參數將被忽略 os.path.getatime(path) 返回path所指向的文件或者目錄的最后訪問時間 os.path.getmtime(path) 返回path所指向的文件或者目錄的最后修改時間 os.path.getsize(path) 返回path的大小序列化
dumps loads:在內存中做數據轉換* dumps 數據類型 轉成 字符串 序列化* loads 字符串 轉成 數據類型 反序列化 dump load在文件中做數據轉換* dump 序列化* loads 反序列化import json ### 向文件中記錄字典 dic = {'key': 'value', 'key2': 'value2'} ret=json.dumps(dic) #序列化 with open('json_file','a') as f:f.write(ret)### 從文件中讀取字典 with open('json_file','r') as f:str_dic=f.read() dic=json.loads(str_dic) print(dic.keys())### 寫文件 import json dic = {'key': 'value', 'key2': 'value2'}with open('json_file1','a') as f:json.dump(dic,f)### 讀文件 with open('json_file1','r') as f:dic=json.load(f)print(dic.keys())###格式化 方便自己看 json.dumps(data,indent=4)pickle
支持在python中幾乎所有的數據類型 只能在python中使用 在做文件操作的時候,需要用rb wb的模式打開文件 可以多次dump 和多次load import pickle pickle.dumps pickle.loads pickle.dump pickle.loadimport pickle dic={"key": "value", "key2": "value2"}### 寫 with open('json_file2','wb') as f:pickle.dump(dic,f)### 讀 with open('json_file2','rb') as f:print(pickle.load(f))異常處理
try:執行的代碼 except Exception as e:print(e)# 可以寫在文件里面 #### try:執行的代碼 except:報錯的信息 else: #當try中代碼不發生異常的時候,走else分支,# 也就是說發送成功了,進行一些處理xxx### finally: # 無論如果都會被執行# 即使return 也會先執行 fianlly 中的代碼 # finally 用來回收一些操作系統的資源:數據庫連接,打開文件的句柄,網絡連接網絡異常的幾種方式 try...except try...except...else try...findlly try...except...finally try...except...else...finally主動拋出異常 :是給其他開發者用的 raise ValueError斷言 (看源碼) assert 1==2 只能接受一個布爾值異常處理的忠告,在最外層的異常處理應該在所有的開發結束之后再放異常
轉載于:https://www.cnblogs.com/fangdongdemao/p/10806156.html
總結
以上是生活随笔為你收集整理的python基础复习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cookie的相关知识
- 下一篇: 软件设计入门之路