python包括哪些部分_第一部分 Python基础篇
第?一部分 Python基礎篇
1. 為什什么學習Python?
朋友推薦,比較簡單易學,生態圈比較強大
發展趨勢:人工智能、數據分析
2. 通過什什么途徑學習的Python?
廖雪峰、網絡博客、相關視頻、朋友帶
3. Python和Java、PHP、C、C#、C++等其他語?言的對?比?
解釋型語言:python? php(你的程序運行時,一行一行的解釋,并運行)
優點:調試代碼方便,開發效率高,并且可以跨平臺
缺點:運行速度慢
編譯型:C,C++,go (一次性,將全部的程序變異成二進制文件,然后運行)
優點:速度快
缺點:開發效率低,不能跨平臺
混合型:c#,java
4. 簡述解釋型和編譯型編程語?言?
解釋型:你的程序運行時,一行一行的解釋,并運行
編譯型:一次性,將全部的程序變異成二進制文件,然后運行
5. Python解釋器?種類以及特點?
1、Cpython(最常用的版本)
Python的官方版本,使用C語言實現,使用最為廣泛,CPython實現會將源文件(py文件)轉換成字節碼文件(pyc文件),然后運行在Python虛擬機上。
2、Jyhton
Python的Java實現,Jython會將Python代碼動態編譯成Java字節碼,然后在JVM上運行。
3、IronPython
Python的C#實現,IronPython將Python代碼編譯成C#字節碼,然后在CLR上運行。(與Jython類似)
4、PyPy(特殊)
Python實現的Python,將Python的字節碼字節碼再編譯成機器碼。
5、RubyPython、Brython ...
6. 位和字節的關系?
位:bit,表示二進制位(位是計算機內部數據存儲的最小單位)
字節:byte?習慣用B表示(字節是計算機處理數據的基本單位,一個字節8個二進制位構成)
1Byte=8bit
7. b、B、KB、MB、GB 的關系?
1B=8bit
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB
8. 請?至少列列舉5個 PEP8 規范(越多越好)。
什么是PEP
PEP是?Python Enhancement Proposal?的縮寫,翻譯過來就是?Python增強建議書?。
PEP8
譯者:本文基于 2013-08-02 最后修改的 PEP8 版本翻譯,若要查看英文原文,請參考PEP8
規范:
1.縮進,4個空格的縮進TAB,不要混合空格和TAB鍵使用
2.每行最大長度79,換行使用反斜杠,最好使用圓括號,換行點要在操作符的后面敲回車
3.類與類之間空兩行,類中的方法定義之間空一行;函數內邏輯無關段落空一行,其他盡量不空行
4.import部分,按照標準、三方和自己編寫順序依次排放,直接空一行
5.避免不必要的空格
空格的使用
總體原則,避免不必要的空格。
1 各種右括號前不要加空格。
2 逗號、冒號、分號前不要加空格。
3 函數的左括號前不要加空格。如Func(1)。
4 序列的左括號前不要加空格。如list[2]。
5 操作符左右各加一個空格,不要為了對齊增加空格。
6 函數默認參數使用的賦值符左右省略空格。
7 不要將多句語句寫在同一行,盡管使用‘;’允許。
8 if/for/while語句中,即使執行語句只有一句,也必須另起一行。
9. 通過代碼實現如下轉換:
二進制轉換成十進制:v = “0b1111011”
十進制轉換成?進制:v = 18
八進制轉換成十進制:v = “011”
十進制轉換成八進制:v = 30
十六進制轉換成十進制:v = “0x12”
十進制轉換成十六進制:v = 87
10.請編寫?一個函數實現將IP地址轉換成一個整數。
如 10.3.9.12 轉換規則為:
10 00001010
3 00000011
9 00001001
12 00001100
再將以上?二進制拼接起來計算?十進制結果:00001010 00000011 00001001 00001100 = ?
??
11.python遞歸的最大層數?
998?就會報錯
12.求結果:
v1 = 1 or 3
1
v2 = 1 and 3
3
v3 = 0 and 2 and 1
0
v4 = 0 and 2 or 1
1
v5 = 0 and 2 or 1 or 4
1
v6 = 0 or False and 1
False
13.ascii、unicode、utf-8、gbk 區別?
Ascii:?1個字節?支持英文
14.字節碼和機?碼的區別?
機器碼(machine code),學名機器語言指令,有時也被稱為原生碼(Native Code),是電腦的CPU可直接解讀的數據。
字節碼是一種中間狀態(中間碼)的二進制代碼(文件)。需要直譯器轉譯后才能成為機器碼。
15.三元運算規則以及應?用場景?
三元運算符就是在賦值變量的時候,可以直接加判斷,然后賦值
16.列舉 Python2和Python3的區別?
編碼:2?asscii? ?3?utf-8
去掉了一些語法?xrange模塊?不再有經典類
print?函數
17.用一行代碼實現數值交換:
a = 1
b = 2
a,b = b,a
18.Python3和Python2中 int 和 long的區別?
py3中沒有long整型,統一使用int,大小和py2的long類似。
py2中int最大不能超過sys.maxint,根據不同平臺大小不同;
在int類型數字后加L定義成長整型,范圍比int更大。
字符串
python2?字符串是字節
python3?默認是unicode
19.xrange和range的區別?
range產生的是一個列表,xrange產生的是生成器。
數據較大時xrange比range好。
Range一下把數據都返回,xrange通過yield每次返回一個。
20.文件操作時:xreadlines和readlines的區別?
xredilnes:內部通過yield生成一個生成器(python2)一行一行讀
redines:讀取所有內容? for循環
21.列舉布爾值為False的常見值?
0,空列表,空字典,空字符串,空元組
22.字符串、列表、元組、字典每個常用的5個方法?
字符串:upper?lower? count? .format? index replace split
列表:
增:append? insert
刪:pop
.count() 查看有元素出現的次數
.extend() 批量添加元素
.remove() 移除某個元素
.reverse() 把所有元素順序倒過來,反轉
.sort() 排序
元組:
name_tuple = ('alex','eric')
索引
print(name_tuple[0])
len
print(name_tuple[len(name_tuple)-1])
切片
print(name_tuple[0:1])
for
for i in name_tuple:
print(i)
count:計算元素出現的個數
print(name_tupel.count('alex'))
index:獲取指定元素的索引位置
print(name_tupel.index('alex'))
字典:
#定義字典
d={'x':1,'y':12222}
#長度 len(d)
#新增
d['x']=2
print(d)
#遍歷print(d.items())
for item in d.items(): #[('x', 1), ('y', 12222)]
print(item) #以元組的形式取出鍵值對
for k,v in d.items(): #解壓鍵值對
print(k,v)
print(d.keys()) # 獲取所有的key
print(d.values()) # 獲取所有的values
print(d.itmes()) #獲取所有的元素
查找
print(d.get('y'))
print(d.get('y','找不到'))
print(d.get('e','找不到'))
刪除鍵值對
d.pop('x')
print(d)
隨機刪除鍵值對
print(d.popitem())
print(d)
清除元素
d.clear()
print(d)
#快速產生字典
d1={}
d2=dict()
d3=dict(x=1,y=2,z=3)
d4=dict({'x':1,'y':2,'z':3})
d5=dict([('x',1),('y',2),('z',3)])
d6={}.fromkeys(['name','age'],None) #把key的值都設置成None,用于創建初始的字典
print(d1,d2,d3,d4,d5,d6)
#更新字典元素,覆蓋
d={'name':'alex'}
d1={'name':'alexsb','age':50}
d.update(d1)
print(d)
23.lambda表達式格式以及應用場景?
add=lambda x,y:x+y
print(add(1,2))
24.pass的作用?
pass一般用于占位語句,保持代碼的完整性,不會做任何操作
25.*arg和**kwarg作用
動態參數,一般在定義函數是,不知道需要傳入幾個參數,就可以使用這個來定義參數,然后再這個里面來取
*args:按照位置傳參的,將參數打包成一個元組
*kwargs:按照關鍵字傳入參數,將傳入的參數打包成一個字典
26.is和==的區別
is:is比較的是內存地址
==:比較的值
27.簡述Python的深淺拷貝以及應用場景?
淺拷貝:copy 第一層創建的是新的內存地址,而從第二次開始指向的都是同一個內存地址,第二層及更深層開始與原內存地址相同
深拷貝:deepcopy?兩個完全獨立,改變一個,另一個不會變
28.Python垃圾回收機制?
引用計數 (對象被引用時+1,引用的對象被刪除時-1)
標記清除
分代回收(系統中的所有內存塊根據其存活時間劃分為不同的集合,每一個集合就成為一個“代”,垃圾收集的頻率隨著“代”的存活時間的增大而減小)
python中的垃圾回收是以引用計數為主,分代回收為輔,如果一個對象的引用數為0,python就會回收這個對象的內存.將系統中的所有內存塊根據其存活時間化為不同的代,垃圾收集頻率隨著代的存活時間增大而減少,?也就是說新對象被定義為0代,每次創建新對象時,python會檢測0代,滿了就開始回收,從0代出發,檢測循環引用,釋放引用數為0的對象
29.Python的可變類型和不不可變類型?
可變:列表,字典
不可變:元組,字符串,數字
30.求結果:
v = dict.fromkeys(['k1','k2'],[])
v[‘k1’].append(666)
print(v)
v[‘k1’] = 777
print(v)
31.求結果:
答:
32.列舉常見的內置函數?
map:接收倆個參數,一個函數,一個可迭代對象,map將傳入的函數依次作用到序列的每個元素,并把結果作為新的list返回。
filter()函數接收一個函數 f 和一個list,這個函數 f 的作用是對每個元素進行判斷,返回 True或 False,
filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。
zip
函數用于將可迭代的對象作為參數,將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的列表。
reduce
python3?里面導入functiontools?才可以使用
函數會對參數序列中元素進行累積。
用傳給reduce中的函數 function(有兩個參數)先對集合中的第1、2個元素進行操作,得到的結果再與第三個數據用function函數運算,最后得到一個結果。
33.filter、map、reduce的作用?
filter:條件過濾篩選
map:接收兩參數(一個函數,一個可迭代對象)
reduce:參數累加,一次運算結果的和,與第三個數據進行運算
34.一行代碼實現9*9乘法表
print(["%d*%d=%d"%(i,j,i*j) for i in range(1,10)for j in range(1,i+1)])
35.如何安裝第三方模塊?以及用過哪些第三方模塊?
1 可以在pycharm里面的settings里面手動的添加第三方模塊,
2 在cmd終端可以使用pip install 安裝第三方模塊
我用過的第三方模塊大概有:requests,pymysql,DBUtils等等
36.至少列舉8個常用模塊都有那些?
time,os,re,random,json,sys,login
37.re的match和search區別?
re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數?? ??? ??? ?返回None;
re.search匹配整個字符串,直到找到一個匹配。
38.什么是正則的貪婪匹配?
貪婪匹配:? ?匹配1次或多次<.>? ? ?匹配0次或多次<.>
非貪婪匹配:匹配0次或1次<.>
39.求結果:
a. [ i % 2 for i in range(10) ]
b. ( i % 2 for i in range(10) )
40.求結果:
a. 1 or 2
1
b. 1 and 2
2
c. 1 < (2==2)
False
d. 1 < 2 == 2
True
41.def func(a,b=[]) 這種寫法有什么坑?
如果第二次再調用的時候,之前參數列表里的值會存在迭代
42.如何實現 “1,2,3” 變成 [‘1’,’2’,’3’] ?
43.如何實現[‘1’,’2’,’3’]變成[1,2,3] ?
44. 比較: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的區別?
???????
45.如何用一行代碼生成[1,4,9,16,25,36,49,64,81,100] ?
[i*i for i in range(1,11)]
46.一行代碼實現刪除列表中重復的值 ?
list(set([1, 2, 3, 4, 45, 1, 2, 343, 2, 2]))
47.如何在函數中設置一個全局變量 ?
python中的global語句是被用來聲明全局變量的。
48.loging模塊的作用?以及應用場景?
模塊定義的函數和類為應用程序和庫的開發實現了一個靈活的事件日志系統
作用:可以了解程序運行情況,是否正常
在程序的出現故障快速定位出錯地方及故障分析
49.請用代碼簡答實現stack 。
class Stack(object):
"""棧"""
def __init__(self):
self.items = []
def is_empty(self):
"""判斷是否為空"""
return self.items == []
def push(self, item):
"""加入元素"""
self.items.append(item)
def pop(self):
"""彈出元素"""
return self.items.pop()
def peek(self):
"""返回棧頂元素"""
return self.items[len(self.items)-1]
def size(self):
"""返回棧的大小"""
return len(self.items)
if __name__ == "__main__":
stack = Stack()
stack.push("hello")
stack.push("world")
stack.push("lcg")
print stack.size()
print stack.peek()
print stack.pop()
print stack.pop()
print stack.pop()
50.常用字符串格式化哪幾種?
1.占位符? %
%d整數? %f?浮點數? ?%s?字符串
2.format?通過關鍵字
51.簡述 生成?、迭代?、可迭代對象 以及應用場景?
迭代器:__iter__?和?__next__方法(包含__next__方法的可迭代對象就是迭代器)
生成器:包含yild關鍵字,生成器也是迭代器,調動next把函數變成迭代器
可迭對象: ?一個類內部實現__iter__方法且返回一個迭代器。
應用場景:
應用場景:
- wtforms中對form對象進行循環時候,顯示form中包含的所有字段。
class LoginForm(Form):
name = simple.StringField(
label='用戶名',
validators=[
validators.DataRequired(message='用戶名不能為空.'),
validators.Length(min=6, max=18, message='用戶名長度必須大于%(min)d且小于%(max)d')
],
widget=widgets.TextInput(),
render_kw={'class': 'form-control'}
)
pwd = simple.PasswordField(
label='密碼',
validators=[
validators.DataRequired(message='密碼不能為空.'),
validators.Length(min=8, message='用戶名長度必須大于%(min)d'),
validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}",
message='密碼至少8個字符,至少1個大寫字母,1個小寫字母,1個數字和1個特殊字符')
],
widget=widgets.PasswordInput(),
render_kw={'class': 'form-control'}
)
form = LoginForm()
for item in form:
print(item)
- 列表、字典、元組
52.用Python實現一個二分查找的函數。
二分查找算法:簡單的說,就是將一個列表先排序好,比如按照從小到大的順序排列好,當給定一個數據,比如3,查找3在列表中的位置時,可以先找到列表中間的數li[middle]和3進行比較,當它比3小時,那么3一定是在列表的右邊,反之,則3在列表的左邊,比如它比3小,則下次就可以只比較[middle+1, end]的數,繼續使用二分法,將它一分為二,直到找到3這個數返回或者列表全部遍歷完成(3不在列表中)
優點:效率高,時間復雜度為O(logN);
缺點:數據要是有序的,順序存儲。
li = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def search(someone, li):
l = -1
h = len(li)
while l + 1 != h:
m = int((l + h) / 2)
if li[m] < someone:
l = m
else:
h = m
p = h
if p >= len(li) or li[p] != someone:
print("元素不存在")
else:
str = "元素索引為%d" % p
print(str)
search(3, li)??# 元素索引為2
53.談你對閉包的理解?
bar在foo函數的代碼塊中定義。我們稱bar是foo的內部函數。
在bar的局部作用域中可以直接訪問foo局部作用域中定義的m、n變量。
簡單的說,這種內部函數可以使用外部函數變量的行為,就叫閉包。
def foo():
m = 3
n = 5
def bar():
a = 4
return m+n+a
return bar
bar = foo()
g=bar()
print(g)
##### 12
54.os和sys模塊的作用?
os模塊負責程序與操作系統的交互,提供了訪問操作系統底層的接口;
sys模塊負責程序與python解釋器的交互,提供了一系列的函數和變量,用于操控python的運行時環境。
55.如何生成一個隨機數?
import random
print(random.random()) # 用于生成一個0到1的隨機符點數: 0 <= n < 1.0
print(random.randint(1, 1000)) # 用于生成一個指定范圍內的整數
56.如何使用python刪除一個文件?
import os
file = r'D:\test.txt'
if os.path.exists(file):
os.remove(file)
print('delete success')
else:
print('no such file:%s' % file)
57.談談你對面向對象的理解?
從三大特性說起:繼承、封裝、多態
封裝:
起始就是將很多數據封裝到一個對象中,類似于把很多東西放到一個箱子中,
如:一個函數如果好多參數,起始就可以把參數封裝到一個對象再傳遞。
在哪里用過:
- django rest framework中的request對象。
- flask中:ctx_context/app_context對象
繼承:
如果多個類中都有共同的方法,那么為了避免反復編寫,就可以將方法提取到基類中實現,
讓所有派生類去繼承即可。
在哪里用過?
- 視圖
- 版本、認證、分頁
多態:
python本身就是多態的,崇尚鴨子模型,只要會呱呱叫的就是鴨子。
def func(arg):
arg.send()
是否繼承多繼承?
58.Python面向對象中的繼承有什么特點?
將多個類共用的方法提取到父類中,子類僅需繼承父類,而不必一一實現每個方法。
59.面向對象深度優先和廣度優先是什么?
Python的類可以繼承多個類,Python的類如果繼承了多個類,那么其尋找方法的方式有兩種
當類是經典類時,多繼承情況下,會按照深度優先方式查找
當類是新式類時,多繼承情況下,會按照廣度優先方式查找
簡單點說就是:經典類是縱向查找,新式類是橫向查找
經典類和新式類的區別就是,在聲明類的時候,新式類需要加上object關鍵字。在python3中默認全是新式類
60.面向對象中super的作用?
用于子類繼承父類的所有屬性和方法
61.是否使用過functools中的函數?其作用是什什么?
裝飾器中,functools.waarps():主要用來修復裝飾器
62.列舉面向對象中帶雙下劃線的特殊方法,如:__new__、__init__
__new__ :生成實例
__init__:生成實例的屬性
63.如何判斷是函數還是方法?
看他的調用者是誰,如果是類,需要傳入一個參數self的值,這時他就是一個函數,
如果調用者是對象,不需要給self傳入參數值,這時他是一個方法
from types import MethodType,FunctionType
class Foo(object):
def fetch(self):
pass
Foo.fetch???此時fetch為函數
print(isinstance(Foo.fetch,MethodType))
print(isinstance(Foo.fetch,FunctionType)) # True
obj = Foo()
obj.fetch??此時fetch為方法
print(isinstance(obj.fetch,MethodType)) # True
print(isinstance(obj.fetch,FunctionType))
64.靜態方法和類方法區別?
classmethod?類方法??必須有一個指向類對象的引用作為第一個參數
staticmethod? 靜態方法?可以沒有任何參數
65.列舉面向對象中的特殊成員以及應用場景
1、__init__:
在類實例化成對象時,會首先調用__init__方法。
__init__的返回值一定要是None
2、__new__:
__new__方法是在一個對象實例化的時候調用的第一個方法,不過一般都是用python默認的一般很少重寫,只有當繼承的類是一個不可變類型的時候才會去重寫,__new__方法,第一個參數是這個類(cls)。
這個方法需要返回一個實例對象,通常是cls實例化的對象,也可以是其他的。
3.__del__:
當對象將要被銷毀的時候該方法就會被調用。
4.__dict__:
python中__dict__存儲了該對象的一些屬性。是一個字典,鍵為屬性名,值為屬性值。類和實例分別擁有自己的__dict__,且實例會共享類的__dict__。在__init__中,self.xxx = xxx會把變量存在實例的__dict__中,僅會在該實例中能獲取到,而在方法體外聲明的,會在class的__dict__中。
5.__dir__:
__dict__與dir()的區別:
dir()是一個函數,返回的是list。dir()用來尋找一個對象的所有屬性,包括__dict__中的屬性,__dict__是dir()的子集;并不是所有對象都擁有__dict__屬性。許多內建類型就沒有__dict__屬性,如list,此時就需要用dir()來列出對象的所有屬性。
6、__getitem__(self,key):
返回鍵對應的值。
print(obj.["xxx"])
7、__setitem__(self,key,value):
設置給定鍵的值
obj.["xxx"]=123
8、__delitem__(self,key):
刪除給定鍵對應的元素。
9、__len__():
返回元素的數量
10.__setattr__
如果類自定義了__setattr__方法,當通過實例獲取屬性嘗試賦值時,就會調用__setattr__。常規的對實例屬性賦值,被賦值的屬性和值會存入實例屬性字典__dict__中。
12、__getattr__:實例instance(類名)通過instance.name訪問屬性name,__getattr__方法一直會被調用,無論屬性name是否存在。找不到回去調用父類的__getattr__,如果當前類還定義了__getattr__方法,除非通過__getattr__顯式的調用它,或者__getattr__方法出現AttributeError錯誤,否則__getattr__方法不會被調用了。如果在__getattr__方法下存在通過self.attr訪問屬性,會出現無限遞歸錯誤。類中中定義了__getattr__方法,實例instance獲取屬性時,都會調用__getattr__返回結果,即使是訪問__dict__屬性。
13、__call__:
__call__方法用于實例自身的調用:
14、__str__:
用來返回對象的字符串表達式。
15、__mro__:wtform中 FormMeta中繼承類的優先級
16、 - metaclass
- 作用:用于指定使用哪個類來創建當前類
- 場景:在類創建之前定制操作
示例:wtforms中,對字段進行排序。
查看當前類繼承了哪些類。
__雙線方法__
66.1、2、3、4、5 能組成多少個互不相同且無重復的三位數
使用python內置的排列組合函數(不放回抽樣排列)
product 笛卡爾積 (有放回抽樣排列)
permutations 排列 (不放回抽樣排列)
combinations 組合,沒有重復 (不放回抽樣組合)
combinations_with_replacement 組合,有重復 (有放回抽樣組合)
import itertools
print(len(list(itertools.permutations('12345', 3))))??# 60
67.什么是反射?以及應用場景?
反射的核心本質就是以字符串的形式去導入個模塊,通過字符串的形式操作對象相關的屬性
Django中的 CBV就是基于反射實現的。
68.metaclass作用?以及應用場景?
指定當前類是由那個類創建的
默認為type
- 場景:在類創建之前定制操作
- 示例:wtforms中,對字段進行排序。
69.用盡量多的方法實現單例模式。
應用場景:Django中的admin組件中admin.site()就是由單例模式創建的,其中封裝了所有的表對象
1:使用模塊
Python的模塊就是天然的單例模式。
因為模塊在第一次導入時,會生成 .pyc 文件,當第二次導入時,就會直接加載 .pyc 文件,而不會再次執行模塊代碼。
因此,我們只需把相關的函數和數據定義在一個模塊中,就可以獲得一個單例對象了。
例如:
class V1(object):
def foo(self)
pass
V1 = V1()
將上面代碼保存在文件test.py,要使用時,直接在其他文件中導入此文件中的對象,這個對象既是單例模式的對象
如:from a import V1
2:使用裝飾器
def Singleton(cls):
_instance = {}
def _singleton(*args, **kargs):
if cls not in _instance:
_instance[cls] = cls(*args, **kargs)
return _instance[cls]
return _singleton
@Singleton
class A(object):
a = 1
def __init__(self, x=0):
self.x = x
a1 = A(2)
a2 = A(3)
3:使用類
4:基于__new__方法實現
當我們實例化一個對象時,是先執行了類的__new__方法
當:(我們沒寫時,默認調用object.__new__),實例化對象;然后再執行類的__init__方法,對這個對象進行初始化,所有我們可以基于這個,實現單例模式
70.裝飾?的寫法以及應用場景。
問題:什么是裝飾器?
在對原函數不進行修改時,在函數執行前和執行后添加功能
問題:手寫裝飾器
import functools
def warpper(func):
@functools.wraps(func)???#不改變原函數屬性
def inner(*args,**kwargs):
#執行函數前
return func(*args,**kwargs)
#執行函數后
return inner
# 1. 執行wapper函數,并將被裝飾的函數當做參數。 wapper(index)
# 2. 將第一步的返回值,重新賦值給??新index =??wapper(老index)
@warpper???#index=warpper(index)
def index(x):
return x+100
問題:應用場景
django: csrf 內置認證、緩存
flask: 路由、before_request
帶參數裝飾器:flask:路由
CBV as_view()
71.異常處理寫法以及如何主動跑出異常(應用場景)
try:
fh = open("testfile", "w")
try:
fh.write("這是一個測試文件,用于測試異常!!")
finally:
print "關閉文件"
fh.close()
except IOError:
print "Error: 沒有找到文件或讀取文件失敗"
raise拋異常
inputValue=input("please input a int data :")
if type(inputValue)!=type(1):
raise ValueError
else:
print inputValue
72.什么是面向對象的mro
__mro__ wtform中 FormMeta中繼承類的優先級
73.isinstance作用以及應用場景?
isinstance(對象,類)? 判斷這個對象是不是這個類或者這個類的子類的實例化
# # 判斷a 屬不屬于A這個類(可以判斷到祖宗類)
class A:
pass
class B(A):
pass
a = A()
b = B()
print(isinstance(b,A)) # ===> True??判斷到祖宗類
# 任何與object都是True,內部都繼承object
class A:pass
a = A()??# 實例化
print(isinstance(a,object))??#??True
74.寫代碼并實現:
Given an array of integers, return?indices?of the two numbers such that they add up to a
specific target.You may assume that each input would have?exactly?one solution, and you may
not use the?same?element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1]
????
75.json序列化時,可以處理的數據類型有哪些?如何定制支持datetime類型?
整數、字符創、字典、列表、bool、None
重寫default()
import json
import datetime
dic = {
'k1':123,
'ctime':datetime.datetime.now()
}
class MyJSONEncoder(json.JSONEncoder):
def default(self,o):
if isinstance(o,datetime.datetime):
return o.strftime("%Y-%m-%d")
else:
return super(MyJSONEncoder,self).default(o)
v=json.dumps(dic,cls=MyJSONEncoder)
print(v)
76.json序列列化時,默認遇到中?文會轉換成unicode,如果想要保留中文怎么辦?
json.dumps(xxxx,ensure_ascii=False)
77.什么是斷言?應用場景?
assert 是的作用?斷言
條件成立(布爾值為True)則繼續往下,否則跑出異常,一般用于:滿足某個條件之后,才能執行,否則應該跑出異常。
寫API的時候,繼承GenericAPIView
78.有用過with statement嗎?它的好處是什么?
with語句是通過一個上下文管理器定義的方法來對一段程序進行打包執行.這將讓常見的try…except…finally模式用法被包裝起來以便重復使用
with statement作用:執行完后自動執行__close__方法。
79.使用代碼實現查看列舉目錄下的所有文件。
import os
path = 'C:/'for root, dirs, files in os.walk(path):
print("Root = ", root, "dirs = ", dirs, "files = ", files)
80.簡述 yield和yield from關鍵字。
yield from?從生成器里邊嵌套取值
py2: yield
py3: yield/yield from
總結
以上是生活随笔為你收集整理的python包括哪些部分_第一部分 Python基础篇的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: python 视图对象_python w
 - 下一篇: 《流浪地球》将推出衍生动画短片剧集