1. 程式人生 > 其它 >python基礎學習筆記

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):程式暫停兩秒再執行