python基礎學習筆記
變數
id(a)檢視記憶體空間地址
多重賦值:a,b=1,2
檢視型別:type
物件
python中一切皆物件
數字,列表,元組,字典,集合,字串,函式,類等都是物件
數字
虛數:1 +2j
bool:True,False
整除// 乘方** 不等於!= 等於==
布林運算子 and or not
內建函式
數值計算函式
絕對值:abs(-1)=1
指數運算pow(2,5)=32
四捨五入:round(3.67)=4
除餘:divmod(10,3)=(3,1)
型別轉換
int(3.7)=3
float(3)=3.0
進位制轉換函式
10轉16:hex(255)=0xff 10轉8:oct(255)=0377 10轉2:bin(3)=0b10
ASCII轉換
轉ascii:ord('a')=97
轉字元:chr(97)='a'
內建模組
math:import math
有math.sqrt(),math.sin(),math.cos()等
random:import random
2,100之間的隨機整數:random.randrange(2,100)
2,100之間的隨機浮點數:random.uniform(2,100)
列表中的隨機數:random.choice([1,2,3,4,5])
序列:字串,列表,元組
字串
表達方式‘’ “” """ """
不支援修改如a[2]='r'不行
操作符
a='hello'
b=',world'
索引:支援反向索引如:a[-1]='o',a[-3]=
切片:如a[1:3]='el',a[-3:]='llo'
連線:a+b='hello,world'
重複操作符:a*3='hellohellohello'
成員操作符:in ,not in如‘o’in'hello'=True
內建函式
py內建函式
o在hello中的個數a.count(o)=1
字串內建函式
字串大寫upper,但不改變本身如:a.upper()=HELLO
轉義字元
\' \\ \"
續行符:\
tab:\t 換行符:\n
格式化字元
%s:頂替字串
%d:頂替數字
print('我今年%d歲,我是你%s'%(18,'爸爸'))
列表
a=['h','e','l','l',['q','w']]
列表中的元素:字串,數字,列表
支援修改如a[2]='r'
操作符
索引:可以巢狀索引如a[4][0]='q',反向索引
切片:[:]
連線:+
重複操作符:*
成員操作符:in not in
內建函式
py內建函式:都可以用
獲取元素個數:len()
獲取最大值:max()
獲取最小值min()
元素相加:sum()
列表內建函式
增:末尾加a.append(),指定位置加如a.insert(1,20)
刪:從後面一個一個刪除a.pop()刪除指定下標的元素,a.remove()
改:a[2]="h"
查:統計某個元素在列表出現的次數o a.count('o'),,找出列表某個元素第一個出現的索引位置a.index()
排序:a.reverse(),a.sort():組合一下可以做逆序
列表解析
[x+1 for x in(1,2,3)}]=[2,3,4]
[x*x for x in (1,2,3)]=[1,4,9]
[x**x for x in(1,2,3)]=[1,4,27]
a=['h','e','l','l','s']
[x.upper() for x in a]=HELLO
與range的組合:[x*x for x in range (1:4)]=[1,4,9]
與if的結合:[x*x for x in [1,2,3] if x>2]=9
元組
tuple
操作符
索引:[]
切片:[:]
連線:+
重複:*
成員操作符:in not in
內建函式
t.count()
t.index
對映-字典:
沒有序列,沒有所謂的第一個元素,只有key,因為是通過雜湊計算key得到的hash,運用了雜湊碰撞,所以很快
無序,可變
a={'xiaoming'=10,'xaioli'=20}
操作符
索引:[],裡面是key
成員操作符:in not in
沒有+ *
字典內建函式
以檢視方式返回一個鍵和值列表d.items()
以檢視方式返回一個鍵列表d.keys()
以檢視方式返回一個值列表d.values()
返回值:d.get(),裡面填key
刪除指定鍵和值:d.pop(),裡面填key
刪除字典d的所有元素:d.clear()
從前往後一個一個刪除元素:d.popitem()
複製字典:b = a.copy()
合併與衝突更新如:
d1 = {'A':1,'B':2,'C':3}
d2 = {'A':4,'E':5,'F':6}
d1.update(d2)
print(d1)
={'A': 4, 'B': 2, 'C': 3, 'E': 5, 'F': 6}
返回其值如果沒有將(key, v)新增到字典d中:d.setdefault(key, v)
集合
用到再看,用的少
if條件語句
else if=elif
縮排=4個空格=tab:效果上是一樣的
型別
單條件if else
多條件if elif elif else pass
判斷兩個:and or如if a>20 and a<30:
巢狀:if if else else
條件表示式:
A = Y if X else Z
等價於
if X:
A=Y
else:
A=Z
迴圈語句
while語句
while :
與else結合:while else
for語句
for x in y:x是變數,y是可迭代物件,可以是列表,元組,字典函式等可迭代物件
例子
遍歷字串
遍歷列表
計算和
計算乘積
高階用法
結合else: for else
結合range:for x in range(1,100,2)
range完整引數是三個,第三個是加幾取數
結合zip(),結合map():zip( )函式獲取多個列表的元素,生成內建元祖的列表
l1 = ['a','b','c','d']
l2 = [1,2,3,4]
zip(l1,l2)或者 map(None,l1,l2)
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
for (x,y) in map(None,l1,l2):或者for (x,y) in zip(l1,l2):
print x , y
結合enumerat():加序號,如:
l1 = ['a','b','c']
for (x,y) in enumerate(l1):
print x,y x->x+1加大序號
迴圈控制
break:跳出迴圈
continue:跳出本次迴圈
pass:佔空,保持語句完整
可複用:函式,模組
函式
函式文件:
寫法: def fun(x):
"這是一個函式"
print(x)
檢視:fun.doc
引數
預設引數:
def fun(x=0):
"這是一個函式"
print(x)
關鍵字引數:
def fun(x,y):
"這是一個函式"
print(x)
fun(y=2,x=3)
可變長引數:不限制引數個數
元組型:
def fun(x):
"這是一個函式"
for i in x: #x是一個元組
print(i)
fun(2,3,4,5,6)
字典型:
def fun(**x):
"這是一個函式"
for i in x: #x是一個字典
print(i,x[i])
fun(x=2,y=3,z=4)
混合引數:
def fun(z=1,y,**x):
"這是一個函式"
print(x)
print(y)
print(z)
fun(2,20,30,x=2)
高階函式:用到再看
模組
程式 包含模組
模組包含類
類包含函式
函式包含if while等
一個.py檔案就是一個模組
匯入模組呼叫:
import model1
model1.fun(3)
匯入部分模組
from model1 import fun
fun(3)
#注意要是本地變數和模組變數重複了,本地覆蓋模組,但是也有有好處,呼叫變簡單,且減少記憶體
#from model1 import *:全部呼叫
包=py+_init_.py#初始化檔案
面向物件
類文件 :
class person :
"這是一個人類"
類函式的定義:一定要有self self相當於class
def init(self,name, weight):
self.name=name
self.weight=weight
類函式的呼叫:要先例項化
類屬性的呼叫:不用例項化person.weight
類的例項化:p1 = person('daxiong',11)
類變數初始化(建構函式):
def init(self,name, weight):
self.name=name
self.weight=weight
方法定製:外部修改屬性
person.sed=11
print(person.sed)
dir():檢視可呼叫的引數
特殊類屬性
doc:檢視文件
dict:檢視屬性
name:檢視類名
繼承
超類,子類(繼承多個類,或者是繼承父類的子類都可以)
class person :
"這是一個人類"
def init(self,name,weight):
self.name = name
self.weight = weight
def print_weight(self):
"這是一個函式"
print("name:%d"%self.weight)
def print_gender(self):
pass
def print_name(self):
print("name:%s"%self.name)
class male(person):
def print_gender(self):
print('male')
class female(person):
def print_gender(self):
print('female')
class fatmale(male):
def print_weight(self):
print('我是男胖子,體重是%d斤'%self.weight)
class fatfemale(female):
def print_weight(self):
print('我是女胖子,體重是%d斤'%self.weight)
jx=fatmale('jingxiang',220)
jx.print_weight()
jx.dict
多型:
不同引數
不同類
檔案
三步:開啟檔案,編輯檔案,關閉檔案
開啟檔案
f=open('路徑','方式')
開啟方式:
帶wa沒有的話就新建
基本符號:
r讀
w寫 #重寫
a追加
b以二進位制方式開啟檔案:rb,wb,ab
r+:讀寫,檔案指標在開頭,不覆蓋
w+:讀寫,覆蓋
a+:讀寫,檔案指標在末尾
編輯檔案
f.read(8),不寫數字全讀,能傳出來的,如content=f.read(),print(content)
f.write('這是一個測試文字')
讀取檔案的另外兩種方式
f.readline()讀一行,加數字一個一個一個讀
f.readlines()全讀,加數字一行一行讀
關閉檔案
f.close()
檔案備份
# coding: utf-8
# 獲取要複製的檔名
f1_name=input('請輸入檔案路徑')
#開啟檔案
f1=open(f1_name,'r',encoding='utf-8')
# 開啟並建立要複製到的檔案
#新檔案的名字
position=f1_name.rfind('.')
f2_name=f1_name[0:position]+'【附件】.txt'
f2=open(f2_name,'w')
# 避免檔案太大造成bug
while(True):
#讀取內容
content=f1.read(1024)
#如果為0退出迴圈
if(len(content)==0):
break
#寫入內容
f2.write(content)
#關閉檔案
f1.close()
# 關閉檔案
f2.close())
檔案定位
f.seek(偏移量,位置)
位置:
0:開頭
1:當前位置
2:末尾
查詢指標位置
f.tell()
對檔案的操作:import os
重新命名:
os.rename("原檔名","新檔名")
建立資料夾
os.mkdir("資料夾名")
刪除檔案
os.remove("檔名")
刪除資料夾
os.rmdir("資料夾名")
獲取當前目錄
os.getcwd()
獲取目錄列表
os.listdir("./") #./當前目錄
改變預設目錄
os.chdir("路徑")
絕對路徑和相對路徑:
./:代表目前所在的目錄。
. ./代表上一層目錄。
/:代表根目錄。
批量修改檔名
#01建立資料夾
import os
file_name=input("請輸入要建立的檔名")
os.mkdir("Desktop\\"+file_name)
os.chdir("Desktop\\"+file_name)
#建立檔案
i=0
while(i<6):
f=open("0%d+蠟筆小新.txt"%i,'w')
f.close()
i=i+1
os.chdir("../")
#修改建立的資料夾
#匯入os
import os
#輸入要重新命名的資料夾
files_name=input("請輸入資料夾名稱")
#切換預設目錄
os.chdir("Desktop\\"+files_name)
#獲取資料夾列表
file_list=os.listdir("./")
#迴圈重新命名
for i in file_list:
os.rename(i,"[代哥出品]%s"%i)
異常
格式:
try:
程式碼
except Exception as 變數名:
程式碼
print(變數名)
異常處理可以巢狀
else finally
else:不發生異常會執行的
finally:最後一定會執行的
示例
try:
except Exception as a:
print(a)
else:
finally:
異常丟擲
#自定義異常類
#自定義異常類
class myerror(Exception):
def __init__(self,length,atleast):
self.length=length
self.atleast=atleast
try:
str=input("請輸入字串")
if len(str)<3:
raise myerror(len(str),3)
except myerror as result:#相當於建立了一個物件result
print("你輸入的字串長度是%d,請至少輸入字串大小為%d"%(result.length,result.atleast))
else:
print('沒有發生異常')
finally:
print("程式執行結束")
補充:
可以在except中加上開關:if else語句
if:正常的異常處理
else:raise扔回給python直譯器
有意思的sleep函式
import time
time.sleep(2):程式暫停兩秒再執行