- Python可變類型與不可變類型
不可變類型:數(shù)字菠齿、字符串、元組
可變類型:列表、字典鳖擒、集合 - 淺拷貝和深拷貝
淺拷貝:新舊對(duì)象共享一塊內(nèi)存溉浙,拷貝父對(duì)象,不拷貝對(duì)象內(nèi)部的子對(duì)象
深拷貝:為數(shù)據(jù)重新開辟一塊空間蒋荚,修改新對(duì)象不會(huì)改變?cè)瓕?duì)象
import copy
#淺拷貝
arr=[1,2,3,[4,5,6]]
arr2=arr.copy()
arr2[0]=10
arr2[3][0]=40
print(arr)#[1, 2, 3, [40, 5, 6]]
print(arr2)#[10, 2, 3, [40, 5, 6]]
arr=[1,2,3,[4,5,6]]
arr3=arr[:]
arr3[0]=10
arr3[3][0]=40
print(arr)#[1, 2, 3, [40, 5, 6]]
print(arr3)#[10, 2, 3, [40, 5, 6]]
arr=[1,2,3,[4,5,6]]
arr4=copy.copy(arr)
arr4[0]=10
arr4[3][0]=40
print(arr)#[1, 2, 3, [40, 5, 6]]
print(arr4)#[10, 2, 3, [40, 5, 6]]
#深拷貝
arr=[1,2,3,[4,5,6]]
arr5=copy.deepcopy(arr)
arr5[0]=10
arr5[3][0]=40
print(arr)#[1, 2, 3, [4, 5, 6]]
print(arr5)#[10, 2, 3, [40, 5, 6]]
- Python字符串去重并排序
s='abcabcefefabczzx'
s=list(s) #轉(zhuǎn)成列表
s=set(s) #去重
s=list(s) #轉(zhuǎn)回列表
s.sort() #排序
s=''.join(s)#轉(zhuǎn)回字符串
print(s) #輸出:abcefxz
- Python交換兩個(gè)變量的值
a='abc'
b='cdf'
a,b=b,a
print(a,b) #輸出:cdf abc
- Python提取列表中的數(shù)字
s=[123,'a','b',234,2,5,'abc']
s=list(filter(lambda x:type(x)==int,s))
print(s)
- pip是什么?
python包管理器/模塊管理器 - pip常用指令
pip list
pip install
pip uninstall - 隔離環(huán)境的目的
為了讓每個(gè)應(yīng)用有獨(dú)立的運(yùn)行環(huán)境 - pyhton中的注釋
單行#注釋戳稽,
多行```注釋``,
"""注釋""" - python2.x和python3.x的區(qū)別
- 編碼
python2.x默認(rèn)ASCII 要加# -*- coding:UTF-8
python3.x默認(rèn)unicode - print
print加不加括號(hào)的區(qū)別 - input
2.x input返回?cái)?shù)值類型
raw_input返回字符串類型
3.x input返回字符串類型 - range
2.x 返回列表
3.x 返回迭代器
- 編碼
- 多行語(yǔ)句用\隔開期升,或者()
- 為什么很多人說python弱類型惊奇?
聲明不需要指定,表面弱類型,實(shí)際很嚴(yán)格 - python中的數(shù)據(jù)類型
在python中常用的數(shù)據(jù)類型:數(shù)值 字符串 列表 元組 字典 集合
在python中有多少種數(shù)據(jù)類型:除了以上標(biāo)準(zhǔn)的,還有int long float bool等 - type()返回的結(jié)果是什么?
如果只有第一個(gè)參數(shù),返回對(duì)象的類型吓妆,如果有三個(gè)參數(shù)返回新的類型對(duì)象 - isinstance() 與 type() 區(qū)別
type() 不認(rèn)為子類是一種父類類型赊时,不考慮繼承關(guān)系
isinstance() 會(huì)認(rèn)為子類是一種父類類型,考慮繼承關(guān)系 - int(1.4)和int('1.4')什么結(jié)果?
int(1.4)結(jié)果:1行拢,int('1.4')報(bào)錯(cuò) - 保留兩位小數(shù)round(m,2),a=3.1415926保留兩位小數(shù)
a=3.175
print('%.2f'%a)
b=round(a,2)#四舍五入,小數(shù)點(diǎn)后奇數(shù)+5不進(jìn)1祖秒,偶數(shù)+5進(jìn)1
print(b)
def num2(n):
arr = str(n).split('.')
point = arr[1][0:2]
num = arr[0] + '.' + point
return num
a=num2(1.12212)
print(a)
- bool類型
print(bool('False'))#True
print(bool(0))#False
print(bool([1,2]))#True
print(bool([]))#False
print(bool({}))#False
print(bool(None))#False
- set類型
a={}
b=set()
c={1}
print(type(a))#<class 'dict'>
print(type(b))#<class 'set'>
print(type(c))#<class 'set'>
- repr(x)的區(qū)別str(x)
數(shù)值、列表舟奠、字典輸出相同
repr(x)便于編譯理解,轉(zhuǎn)成表達(dá)式字符串
str(x)便于程序員理解,轉(zhuǎn)成字符串
a='hello\n'
print(str(a)) #hello+換行
print(repr(a)) #'hello\n'
a='1000L'
print(str(a)) #1000L
print(repr(a)) #'1000L'
#1000L長(zhǎng)整型
- 哪些是可變類型,哪些是不可變類型,區(qū)別是什么
可變:列表,字典,集合
不可變:元組,字符串,數(shù)值
arr=[1,2,3,4]
s='abcd'
arr[1]=20
print(arr) #[1, 20, 3, 4]
s[1]='d' #TypeError: 'str' object does not support item assignment
print(arr)
- s=r'\n' 字符串前加r與普通字符串幾乎相同的語(yǔ)法
- 切片
- 第一個(gè) s[0]
- 最后一個(gè) s[-1]
- 2-4 s[1:4]
- 2-最后 s[a:]
- 步長(zhǎng)2 s[1:10:2]
- 字符串反轉(zhuǎn) s[::-1]
- 內(nèi)建函數(shù)
- count()統(tǒng)計(jì)一個(gè)字符串出現(xiàn)的次數(shù)
- find()檢測(cè)字符串中是否包含子串,有返回索引值,否則返回-1
- replace()替換
- 去空格
s=' abc def '
print('**'+s.lstrip()+'**')#**abc def **
print('**'+s.rstrip()+'**')#** abc def**
print('**'+s.strip()+'**')#**abc def**
print('**'+s.replace(' ','')+'**')#**abcdef**
import re
s=' abc def '
s=re.sub(r'\s','',s)
print('**'+s+'**')
- split()字符串拆分成數(shù)組
- join()數(shù)組拼合并成字符串
s1='abc'
s2='123'
s3=['x','y','z']
print(s1.join(s2))
print(s1.join(s3))
- 判斷
- isdigit()判斷是否是純數(shù)字
- isalpha()判斷是否是純字母
- isalnum()判斷是否是字母或數(shù)字
- upper()轉(zhuǎn)大寫
s1='123'
s2='abc'
s3='abc123'
print(s1.isdigit())#True
print(s2.isalpha())#True
print(s3.isalnum())#True
- 列舉常用的五個(gè)模塊
os,re,math,datetime,urllib,request - dir()和help()
dir()不帶參數(shù)時(shí)竭缝,返回當(dāng)前范圍內(nèi)的變量、方法和定義的類型列表
dir()帶參數(shù)時(shí)沼瘫,返回參數(shù)的屬性抬纸、方法列表
help()查看函數(shù)或模塊用途的詳細(xì)說明 - 取整
floor()向下取整
ceil()向上取整
trunc()截?cái)嘈?shù)位
import math
a=1.345
b=-1.567
print(int(a))#1
print(math.floor(a))#1
print(math.ceil(a))#2
print(int(b))#-1
print(math.floor(b))#-2
print(math.ceil(b))#-1
print(math.trunc(a))#1
- 隨機(jī)排序
import random
arr=[1,2,3]
random.shuffle(arr)
print(arr)
- 列表
count()判斷是否存在
append()添加元素
extend()增加集合
insert()插入元素
remove()刪除一個(gè)具體元素
del 刪除一個(gè)具體元素
clear()清空
append+pop()棧
append+popleft隊(duì)列 - 判斷是否存在
s='abcd'
print(s.count('a'))#1找不到不會(huì)報(bào)錯(cuò)
print(s.index('a'))#0找不到會(huì)報(bào)錯(cuò)
print(s.find('a'))#0
print('a' in s)#True
- 列表
sort()
reverse() - 內(nèi)置函數(shù)
map
filter
reduce
sorted - 列表推導(dǎo)式
取偶數(shù)
arr = [1, 2, 6, 3, 1]
arr2 = [i for i in arr if i % 2 == 0]
print(arr2)
二維轉(zhuǎn)一維
arr=[[1,2,3],[4,5,6],[7,8,9]]
arr2=[]
for i in arr:
for j in i:
arr2.append(j)
print(arr2)
arr=[[1,2,3],[4,5,6],[7,8,9]]
arr2=[i for j in arr for i in j]
print(arr2)#[1, 2, 3, 4, 5, 6, 7, 8, 9]
按列取
arr=[[1,2,3],[4,5,6],[7,8,9]]
arr2=[[e[i] for e in arr] for i in range(len(arr))]
print(arr2)#[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
- 查看地址
arr=[1,2,3]
print(id(arr))
- 垃圾回收機(jī)制
- 小對(duì)象對(duì)象池
- -5-256
- 數(shù)字字母下劃線
- 長(zhǎng)度不能大于20
import sys print(sys.getrefcount(3)) a=3 print(sys.getrefcount(3)) b=3 print(sys.getrefcount(3))
- 大對(duì)象對(duì)象池
- 作用域內(nèi)部才等
- python中引用計(jì)數(shù)器如果是0,垃圾回收機(jī)制把它掃掉
- 小對(duì)象對(duì)象池
- 垃圾回收
c、c++用戶自己管理維護(hù)內(nèi)存
java,c#垃圾回收機(jī)制
python的垃圾回收機(jī)制采用引用計(jì)數(shù)器
ruby:標(biāo)記刪除
優(yōu)點(diǎn):實(shí)時(shí)性 處理回收內(nèi)存時(shí)間分?jǐn)偟狡綍r(shí)
缺點(diǎn):維護(hù)引用計(jì)數(shù)器耗資源
垃圾回收機(jī)制工作:為新生的對(duì)象分配內(nèi)存,識(shí)別垃圾,清理垃圾 - 字典的遍歷
goods={
"id":'001',
"price":20
}
for i in goods:
print(i)
#id
#price
for k,v in goods.items():
print(k,v)
# id 001
#price 20
for k in goods.keys():
print(k)
#id
#price
for v in goods.values():
print(v)
#001
#20
- get()
goods={
"id":'001',
"price":20
}
print(goods.get('id'))#001
- pop()
goods={
"id":'001',
"price":20
}
goods.pop('id')
print(goods)#{'price': 20}
- 字典的合并
goods={
"id":'001',
"price":20
}
goods2={
"num":9
}
goods.update(goods2)
print(goods)#{'id': '001', 'price': 20, 'num': 9}
- 字典字符串轉(zhuǎn)換
import json
json.dumps(dict)#字典->字符串
json.loads(str)#字符串->字典
- 元組
一旦創(chuàng)建不可改變耿戚,但可以切片
arr=(1,2,3)
a,*b=arr
print(type(a))#<class 'int'>
print(type(b))#<class 'list'>
- 集合
不重復(fù)
s={1,2,3,3,3,3,3}
print(s)#{1, 2, 3}
添加add()
s={1,2,3}
s.add(4)
print(s)#{1, 2, 3, 4}
移除discard()湿故、remove()、pop()
s={1,2,3}
s.discard(2)
print(s)#{1, 3}
s.discard(4)#移除不存在的元素不會(huì)報(bào)錯(cuò)
s={1,2,3}
s.remove(2)
print(s)#{1, 3}
s.remove(4)#KeyError: 4
- 交集膜蛔、并集
intersection()
union() - 合并并更新
update() - zip()迭代器
s=['a','b','c']
s2=[1,2,3]
s3=zip(s,s2)
print(list(s3))#[('a', 1), ('b', 2), ('c', 3)]
- enumerate()
s=['a','b','c']
for (index,item) in enumerate(s):
print(index,item)
#0 a
#1 b
#2 c
print(list(enumerate(s)))#[(0, 'a'), (1, 'b'), (2, 'c')]
- 迭代器
字符串/數(shù)組本身沒有迭代對(duì)象坛猪,for循環(huán)自動(dòng)加上迭代器
s='hi cat'
i=iter(s)
print(i.__next__())#h
print(i.__next__())#i
print(i.__next__())#
print(i.__next__())#c
print(i.__next__())#a
print(i.__next__())#t
- 生成器
- 推導(dǎo)式寫成()
- yield
L=[x*x for x in range(10)]
G=(x*x for x in range(10))
print(L[-1])#81
while True:
try:
print(G.__next__())
except StopIteration:
break
- 可選參數(shù)、關(guān)鍵字參數(shù)
def add(a,b=2,*c):
print(c)
add(1,2,[5,6,7])#([5, 6, 7],)
add(1,2,*[5,6,7])#(5, 6, 7)
def add(a,b=2,*c,**d):
print(c,d)
add(1,2,*[5,6,7],id='001')#(5, 6, 7) {'id': '001'}
add(1,2,*[5,6,7],**{'id':'001','price':'95'})#(5, 6, 7) {'id': '001', 'price': '95'}
- lambda
s=[1,2,3,4]
def add(i):
return i+2
s2=map(add,s)
print(list(s2))#[3, 4, 5, 6]
s2=map(lambda i:i+2,s)
print(list(s2))#[3, 4, 5, 6]
from functools import reduce
s=[1,2,3,4]
s2=reduce(lambda x,y:x*y,list(range(1,6)))
print(s2)
- Python中g(shù)lobal和nonlocal的區(qū)別
global:在函數(shù)或其他局部作用域中使用全局變量
nonlocal:在函數(shù)或其他作用域中使用外層(非全局)變量
a=1
def add(x):
global a
a=a+1
global c#局部變量全局化
c=2
return x+a
print(add(2))#4
print(c)#2
a=1
def add(x):
a=2
def sub():
global a
a=a+x
return a
return sub()
print(add(200))#201
a=1
def add(x):
a=2
def sub():
nonlocal a
a=a+x
return a
return sub()
print(add(200))#202
- 查詢和替換一個(gè)文本字符串
replace(替換成的字符串,要被替換的字符串,最多替換次數(shù))
a = 'aaabbbccc'
b = a.replace('b','d',3)
print(b) #aaadddccc
re.sub(正則表達(dá)式,替換成的字符串,原字符串,替換次數(shù))
import re
s1 = 'aaabbbccc'
print(re.sub(r'b','d',s1,count=1)) #輸出:aaadbbccc
#或者
import re
s2 = 'aaabbbccc'
reg = re.compile(r'b')
print(reg.sub('d',s2,count=4))#輸出:aaadddccc
- match()和search()的區(qū)別
- match()從字符串的開始匹配皂股,匹配不成功返回None
- search()在字符串內(nèi)匹配墅茉,只找到第一個(gè)匹配并返回,匹配不成功返回None
- __new__() 與__init__()的區(qū)別
__new__作用于__init__()之前
__init__ 是實(shí)例級(jí)別的方法呜呐,通常用于初始化一個(gè)新實(shí)例就斤。
__new__是類級(jí)別的方法,通常用于控制生成一個(gè)新實(shí)例的過程蘑辑。 - 列舉幾種設(shè)計(jì)模式
工廠方法模式:定義一個(gè)創(chuàng)建對(duì)象接口洋机,通過子類來創(chuàng)建對(duì)象。
單例模式:一個(gè)類僅有一個(gè)實(shí)例洋魂,例如框架中的數(shù)據(jù)庫(kù)連接 - 閉包
內(nèi)函數(shù)里運(yùn)用了外函數(shù)的臨時(shí)變量绷旗,并且外函數(shù)的返回值是內(nèi)函數(shù)的引用
def a(s):
def b(s):
print(s)
return b(s)
a('123')
- 回調(diào)
把函數(shù)作為參數(shù)傳遞給另一個(gè)函數(shù)
def a(s):
print(s)
def b(func):
func('123')
b(a)
- Python字符串的編碼與解碼
decode將其他編碼轉(zhuǎn)unicode編碼
encode將unicode編碼轉(zhuǎn)其他編碼
s1='abc'
s2=s1.encode('utf-8') #utf-8編碼轉(zhuǎn)unicode編碼
print(s2) #輸出:b'abc'
s1=s2.decode('utf-8') #unicode編碼轉(zhuǎn)utf-8編碼
print(s1)#輸出:abc
- 裝飾器的作用
在不改變函數(shù)本身的情況下啄踊,為函數(shù)增加新的功能 - 列舉HTTP請(qǐng)求中的狀態(tài)碼
200 訪問成功
302 重定向
404 請(qǐng)求的url不存在
500 服務(wù)器端錯(cuò)誤
505 HTTP版本不受支持 - Flask藍(lán)圖的作用
使不同的功能模塊化
優(yōu)化項(xiàng)目結(jié)構(gòu)
增強(qiáng)可讀性,易于維護(hù) - Python生成隨機(jī)數(shù)
- Python生成隨機(jī)數(shù)
random.randrange(起始位置,結(jié)束位置,步長(zhǎng))
import random
print(random.randrange(10))
print(random.randrange(100,200))
print(random.randrange(300,400,50))
- 在一個(gè)范圍內(nèi),生成不重復(fù)的隨機(jī)數(shù)
s=random.sample(范圍,生成數(shù)量)
import random
print(random.sample(range(0,5),3))
print(random.sample([1,2,3,4,5],3))
- import 和 from import的區(qū)別
import 導(dǎo)入整個(gè)模塊刁标,每次使用模塊中的函數(shù)時(shí)需要確定是哪個(gè)模塊
from import 創(chuàng)建 一個(gè)副本,導(dǎo)入模塊中的函數(shù)址晕,可以直接使用 - Python解釋器對(duì)模塊位置的搜索順序
當(dāng)前主目錄膀懈、PYTHONPATH下的每個(gè)目錄、標(biāo)準(zhǔn)第三方鏈接庫(kù)谨垃、.pth文件 - 靜態(tài)方法和類方法的關(guān)鍵字
靜態(tài)方法: @staticmethod
類方法:@classmethod - Python主要特點(diǎn)和優(yōu)點(diǎn)
可解釋
具有動(dòng)態(tài)特性
面向?qū)ο?br> 簡(jiǎn)明簡(jiǎn)單
開源
具有強(qiáng)大的社區(qū)支持 - Python的自省
運(yùn)行時(shí)能夠獲得對(duì)象的類型启搂。
如:type() dir() getattr() hasattr() isinstance() - Python中的但雙下劃線
單下劃線用處:解釋器中、名稱刘陶、i18n
單下劃線前綴的名稱:受保護(hù)的胳赌,僅能內(nèi)部訪問
雙下劃線前綴的名稱:私有的,僅類對(duì)象自己能訪問(子類也不能訪問)
雙下劃線開頭加結(jié)尾:Python系統(tǒng)自帶的一些函數(shù)和方法