1. Python 的特點(diǎn)和優(yōu)點(diǎn)是什么?
答案:略。
2. 什么是lambda函數(shù)?它有什么好處?
lambda 函數(shù)是一個(gè)可以接收任意多個(gè)參數(shù)(包括可選參數(shù))并且返回單個(gè)表達(dá)式值的函數(shù)。 lambda 函數(shù)不能包含命令,它們所包含的表達(dá)式不能超過(guò)一個(gè)。不要試圖向lambda函數(shù)中塞入太多的東西;如果你需要更復(fù)雜的東西,應(yīng)該定義一個(gè)普通函數(shù),然后想讓它多長(zhǎng)就多長(zhǎng)。
lambda函數(shù)可以接受任意個(gè)參數(shù),包括可選參數(shù),但是表達(dá)式只有一個(gè):
>>> g = lambda x, y: x*y
>>> g(3,4)
12
>>> g = lambda x, y=0, z=0: x+y+z
>>> g(1)
1
>>> g(3, 4, 7)
14
也能夠直接使用lambda函數(shù),不把它賦值給變量:
>>> (lambdax,y=0,z=0:x+y+z)(3,5,6)
14
如果你的函數(shù)非常簡(jiǎn)單,只有一個(gè)表達(dá)式,不包含命令,可以考慮lambda函數(shù)。否則,你還是定義函數(shù)才對(duì),畢竟函數(shù)沒(méi)有這么多限制。
3. 深拷貝和淺拷貝的區(qū)別是什么?
深拷貝是將對(duì)象本身復(fù)制給另一個(gè)對(duì)象。這意味著如果對(duì)對(duì)象的副本進(jìn)行更改時(shí)不會(huì)影響原對(duì)象。在 Python 中,我們使用 deepcopy()函數(shù)進(jìn)行深拷貝,使用方法如下:
>>> import copy
>>> b=copy.deepcopy(a)
淺拷貝是將對(duì)象的引用復(fù)制給另一個(gè)對(duì)象。因此,如果我們?cè)诟北局羞M(jìn)行更改,則會(huì)影響原對(duì)象。使用 copy()函數(shù)進(jìn)行淺拷貝,使用方法如下:
>>> b=copy.copy(a)
4. 列表和元組有什么不同?
try…except…except…[else…][finally…]
執(zhí)行try下的語(yǔ)句,如果引發(fā)異常,則執(zhí)行過(guò)程會(huì)跳到except語(yǔ)句。對(duì)每個(gè)except分支順序嘗試執(zhí)行,如果引發(fā)的異常與except中的異常組匹配,執(zhí)行相應(yīng)的語(yǔ)句。如果所有的except都不匹配,則異常會(huì)傳遞到下一個(gè)調(diào)用本代碼的最高層try代碼中。
try下的語(yǔ)句正常執(zhí)行,則執(zhí)行else塊代碼。如果發(fā)生異常,就不會(huì)執(zhí)行;如果存在finally語(yǔ)句,最后總是會(huì)執(zhí)行。
5. Python里面如何生成隨機(jī)數(shù)?
答:random模塊
隨機(jī)整數(shù):random.randint(a,b):返回隨機(jī)整數(shù)x,a
random.randrange(start,stop,[,step]):返回一個(gè)范圍在(start,stop,step)之間的隨機(jī)整數(shù),不包括結(jié)束值。
隨機(jī)實(shí)數(shù):random.random( ):返回0到1之間的浮點(diǎn)數(shù)
random.uniform(a,b):返回指定范圍內(nèi)的浮點(diǎn)數(shù)
6. 如何在Python中實(shí)現(xiàn)多線程?
a. Python有一個(gè)multi-threading包,但是如果你想讓multi-thread加速你的代碼,那么使用它通常不是一個(gè)好主意。
b. Python有一個(gè)名為GlobalInterpreter Lock(GIL)的結(jié)構(gòu)。 GIL確保只有一個(gè)“線程”可以在任何時(shí)候執(zhí)行。一個(gè)線程獲取GIL,做一點(diǎn)工作,然后將GIL傳遞到下一個(gè)線程。
c. 這種情況很快發(fā)生,因此對(duì)于人眼看來(lái),您的線程似乎并行執(zhí)行,但它們實(shí)際上只是輪流使用相同的CPU核心。
d. 所有這些GIL傳遞都增加了執(zhí)行的開(kāi)銷。這意味著如果您想讓代碼運(yùn)行得更快,那么使用線程包通常不是一個(gè)好主意。
7. 如何在python中使用三元運(yùn)算符?
三元運(yùn)算符是用于顯示條件語(yǔ)句的運(yùn)算符。這包含用于評(píng)估為true或false值的語(yǔ)句。
句法:三元操作符語(yǔ)法如下,
[on_true] if [expression] else [on_false]
例:
x,y = 25,50
big = x if x
如果x
8. 用一個(gè)例子解釋Python中的繼承。
繼承允許一個(gè)類獲得另一個(gè)類的所有成員(比如屬性和方法)。繼承提供代碼可重用性,使創(chuàng)建和維護(hù)應(yīng)用程序變得更容易。我們繼承的類稱為super-class,繼承的類稱為派生/子類。
以下是Python支持的不同類型的繼承:
a. 單一繼承 - 派生類獲取單個(gè)超類的成員。
b. Multi-level繼承 - 從基類base1繼承的派生類d1,d2繼承自base2。
c. 分層繼承 - 從一個(gè)基類可以繼承任意數(shù)量的子類
d. 多重繼承 - 派生類從多個(gè)基類繼承。
9. 解釋Flask是什么及其好處?
Flask是基于“Werkzeug,Jinja2和良好意圖”BSD許可證的Python網(wǎng)絡(luò)微框架。 Werkzeug和Jinja2是它的兩個(gè)依賴項(xiàng)。這意味著它對(duì)外部庫(kù)幾乎沒(méi)有依賴性。它使框架變得輕盈,只是少量依賴于更新和更少的安全性錯(cuò)誤。
會(huì)話基本上允許您記住從一個(gè)請(qǐng)求到另一個(gè)請(qǐng)求的信息。在flask中,會(huì)話使用簽名的cookie,以便用戶可以查看會(huì)話內(nèi)容并進(jìn)行修改。當(dāng)且僅當(dāng)有密鑰Flask.secret_key,用戶可以修改會(huì)話。
10. Python中的字典是什么?
Python中的內(nèi)置數(shù)據(jù)類型稱為字典。它定義了鍵和值之間的one-to-one關(guān)系。字典包含一對(duì)鍵及其對(duì)應(yīng)的值。字典由鍵來(lái)索引。
我們來(lái)舉個(gè)例子:
以下示例包含一些鍵,Country, Capital & PM,它們的相應(yīng)值分別是印度,德里和莫迪。
dict={'Country':'India','Capital':'Delhi','PM':'Modi'}
print dict[Country]
India
print dict[Capital]
Delhi
print dict[PM]
Modi
11. 什么是負(fù)指數(shù),為什么使用它們?
Python中的序列是索引的,它由正數(shù)和負(fù)數(shù)組成。正的數(shù)字使用'0'作為第一個(gè)索引,'1'作為第二個(gè)索引,以此類推。
負(fù)數(shù)的索引從'-1'開(kāi)始,表示序列中的最后一個(gè)索引,' - 2'作為倒數(shù)第二個(gè)索引,依次類推。
12. 如何用Python來(lái)進(jìn)行查詢和替換一個(gè)文本字符串?
可以使用sub()方法來(lái)進(jìn)行查詢和替換,sub方法的格式為:
a. sub(replacement, string[,count=0])
b. replacement是被替換成的文本
c. string是需要被替換的文本
d. count是一個(gè)可選參數(shù),指最大被替換的數(shù)量
13. 解釋一下python的and-or語(yǔ)法
與C表達(dá)式 bool ? a : b類似,但是bool and a or b,當(dāng) a 為假時(shí),不會(huì)象C表達(dá)式 bool ? a : b 一樣工作
應(yīng)該將 and-or 技巧封裝成一個(gè)函數(shù):
defchoose(bool, a,b):return(booland[a]or[b])[0]
因?yàn)?[a] 是一個(gè)非空列表,它永遠(yuǎn)不會(huì)為假。甚至 a 是 0 或 '' 或其它假值,列表[a]為真,因?yàn)樗幸粋€(gè)元素。
14. 請(qǐng)寫(xiě)出一段Python代碼實(shí)現(xiàn)刪除一個(gè)list里面的重復(fù)元素
1,使用set函數(shù),set(list)
2,使用字典函數(shù),
>>>a=[1,2,4,2,4,5,6,5,7,8,9,0]
>>> b={}
>>>b=b.fromkeys(a)
>>>c=list(b.keys())
>>> c
15. 單引號(hào),雙引號(hào),三引號(hào)的區(qū)別?
單引號(hào)和雙引號(hào)是等效的,如果要換行,需要符號(hào)(/),三引號(hào)則可以直接換行,并且可以包含注釋
如果要表示Let’s go 這個(gè)字符串
單引號(hào):s4 = ‘Let/’s go’
雙引號(hào):s5 = “Let’s go”
s6 = ‘I realy like“python”!’
這就是單引號(hào)和雙引號(hào)都可以表示字符串的原因了。
16. 當(dāng)退出 Python 時(shí)是否釋放所有內(nèi)存分配?
答案是否定的。那些具有對(duì)象循環(huán)引用或者全局命名空間引用的變量,在 Python 退出是往往不會(huì)被釋放
另外不會(huì)釋放 C 庫(kù)保留的部分內(nèi)容。
17. Python里面search()和match()的區(qū)別?
match()函數(shù)只檢測(cè)RE是不是在string的開(kāi)始位置匹配,search()會(huì)掃描整個(gè)string查找匹配, 也就是說(shuō)match()只有在0位置匹配成功的話才有返回,如果不是開(kāi)始位置匹配成功的話,match()就返回none 。
18. 如何在Python中隨機(jī)化列表中的項(xiàng)目?
考慮下面顯示的示例:
from random import shuffle
x = ['Keep', 'The', 'Blue', 'Flag','Flying', 'High']
shuffle(x)
print(x)
以下代碼的輸出如下。
['Flying', 'Keep', 'Blue', 'High', 'The','Flag']
19. 在python中編譯和鏈接的過(guò)程是什么?
編譯和鏈接允許正確編譯新擴(kuò)展而不會(huì)出現(xiàn)任何錯(cuò)誤,并且只有在通過(guò)編譯過(guò)程時(shí)才能進(jìn)行鏈接。如果使用動(dòng)態(tài)加載,則它取決于系統(tǒng)提供的樣式。 python解釋器可用于提供配置設(shè)置文件的動(dòng)態(tài)加載,并將重建解釋器。
這需要的步驟如下:
a. 使用任何名稱以及系統(tǒng)編譯器支持的任何語(yǔ)言創(chuàng)建文件。例如file.c或file.cpp
b. 將此文件放在正在使用的發(fā)行版的Modules /目錄中。
c. 在Modules /目錄中存在的Setup.local文件中添加一行。
d. 使用spam file.o運(yùn)行該文件
e. 成功運(yùn)行此重建解釋程序后,在top-level目錄中使用make命令。
f. 如果文件已更改,則使用命令“make Makefile”運(yùn)行rebuildMakefile。
20. Python解釋“re”模塊的split(), sub(), subn()方法。
要修改字符串,Python的“re”模塊提供了3種方法。他們是:
split() - 使用正則表達(dá)式將“split”給定字符串放入列表中。
sub() - 查找正則表達(dá)式模式匹配的所有子字符串,然后用不同的字符串替換它們
subn() - 它類似于 sub(),并且還返回新字符串和替換的序號(hào)。
21. range和xrange之間有什么區(qū)別?
在大多數(shù)情況下,xrange和range在功能方面完全相同,它們都提供了一種生成整數(shù)列表供您使用的方法。唯一的區(qū)別是range返回一個(gè)Python列表對(duì)象,xrange返回一個(gè)xrange對(duì)象。
這意味著xrange實(shí)際上并不像run-time那樣生成靜態(tài)列表。它使用稱為yielding的特殊技術(shù)根據(jù)需要?jiǎng)?chuàng)建值。該技術(shù)與一種稱為生成器的對(duì)象一起使用。這意味著,如果你有一個(gè)非常巨大的范圍,你想生成一個(gè)列表,比如10億,xrange就是要使用的功能。
如果你有一個(gè)真正的內(nèi)存敏感系統(tǒng),例如你正在使用的手機(jī),尤其如此,因?yàn)閞ange將使用盡可能多的內(nèi)存來(lái)創(chuàng)建整數(shù)數(shù)組,這可能導(dǎo)致內(nèi)存錯(cuò)誤并導(dǎo)致崩潰程序。
22. Django,Pyramid和Flask之間的差異。
Flask是“microframework”,主要用于具有更簡(jiǎn)單要求的小型應(yīng)用程序。在Flask中,您必須使用外部庫(kù)。
Pyramid適用于大型應(yīng)用程序。它提供了靈活性,并允許開(kāi)發(fā)人員為他們的項(xiàng)目使用正確的工具。開(kāi)發(fā)人員可以選擇數(shù)據(jù)庫(kù),URL結(jié)構(gòu),模板樣式等。
Django也可以像Pyramid一樣用于更大的應(yīng)用程序。
23. 列出Django中的繼承樣式。
在Django中,有三種可能的繼承樣式:
抽象基類:當(dāng)您只希望父類包含您不想為每個(gè)子模型鍵入的信息時(shí),使用此樣式。
Multi-table繼承:使用此樣式如果您是sub-classing現(xiàn)有模型并且需要每個(gè)模型都有自己的數(shù)據(jù)庫(kù)表。
代理模型:您可以使用此模型,如果您只想修改模型的Python級(jí)別行為,而無(wú)需更改模型的字段。
24. 什么是Python monkey補(bǔ)丁?
在Python中,術(shù)語(yǔ)monkey補(bǔ)丁僅指run-time上的類或模塊的動(dòng)態(tài)修改。
考慮以下示例:
# m.py
class MyClass:
def f(self):
print "f()"
然后我們可以像這樣運(yùn)行monkey-patch測(cè)試:
import m
def monkey_f(self):
print "monkey_f()"
m.MyClass.f = monkey_f
obj = m.MyClass()
obj.f()
輸出如下:
monkey_f()
我們可以看到,在模塊之外,我們確實(shí)對(duì)函數(shù)f()的行為做了一些改變,實(shí)際執(zhí)行的是函數(shù)monkey_f(),。
25. 有兩個(gè)序列a,b,大小都為n,序列元素的值任意整形數(shù),無(wú)序?
要求:通過(guò)交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。
1. 將兩序列合并為一個(gè)序列,并排序,為序列Source
2. 拿出最大元素Big,次大的元素Small
3. 在余下的序列S[:-2]進(jìn)行平分,得到序列max,min
4. 將Small加到max序列,將Big加大min序列,重新計(jì)算新序列和,和大的為max,小的為min。
26. 如何用Python來(lái)發(fā)送郵件?
可以使用smtplib標(biāo)準(zhǔn)庫(kù)。
以下代碼可以在支持SMTP監(jiān)聽(tīng)器的服務(wù)器上執(zhí)行。
import sys, smtplib
fromaddr =raw_input(“From: “)
toaddrs = raw_input(“To: “).split(‘,’)
print “Enter message, end with ^D:”
msg = ”
while 1:
line = sys.stdin.readline()
if not line:
break
msg = msg + line
# 發(fā)送郵件部分
server = smtplib.SMTP(‘localhost’)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
27. 請(qǐng)寫(xiě)一個(gè)Python邏輯,計(jì)算一個(gè)文件中的大寫(xiě)字母數(shù)量.
>>> import os
>>>os.chdir('C://Users//lifei//Desktop')
>>> with open('Today.txt') astoday:
count=0
for i in today.read():
if i.isupper():
count+=1
print(count)
運(yùn)行結(jié)果:
26
28. Python中的標(biāo)識(shí)符長(zhǎng)度能有多長(zhǎng)?
在Python中,標(biāo)識(shí)符可以是任意長(zhǎng)度。此外,我們?cè)诿麡?biāo)識(shí)符時(shí)還必須遵守以下規(guī)則:
a. 只能以下劃線或者 A-Z/a-z 中的字母開(kāi)頭
b. 其余部分可以使用 A-Z/a-z/0-9
c. 區(qū)分大小寫(xiě)
d. 關(guān)鍵字不能作為標(biāo)識(shí)符,Python中共有如下關(guān)鍵字:
29. 解釋一下Python中的//,%和 ** 運(yùn)算符
//運(yùn)算符執(zhí)行地板除法(向下取整除),它會(huì)返回整除結(jié)果的整數(shù)部分。
>>> 7//2
3
這里整除后會(huì)返回3.5。
同樣地,執(zhí)行取冪運(yùn)算。ab會(huì)返回a的b次方。
>>> 2**10
1024
最后,%執(zhí)行取模運(yùn)算,返回除法的余數(shù)。
>>> 13%7
6
>>> 3.5%1.5
0.5
30. 在Python中如何使用多進(jìn)制數(shù)字?
我們?cè)赑ython中,除十進(jìn)制外還可以使用二進(jìn)制、八進(jìn)制和十六進(jìn)制。
a. 二進(jìn)制數(shù)字由0和1組成,我們使用 0b 或 0B 前綴表示二進(jìn)制數(shù)。
>>> int(0b1010)
10
b. 使用bin()函數(shù)將一個(gè)數(shù)字轉(zhuǎn)換為它的二進(jìn)制形式。
>>> bin(0xf)
‘0b1111’
c. 八進(jìn)制數(shù)由數(shù)字 0-7 組成,用前綴 0o 或 0O 表示 8 進(jìn)制數(shù)。
>>> oct(8)
‘0o10’
d. 十六進(jìn)數(shù)由數(shù)字 0-15 組成,用前綴 0x 或者 0X 表示 16 進(jìn)制數(shù)。
>>> hex(16)
‘0x10’
>>> hex(15)
‘0xf’
31. 怎樣獲取字典中所有鍵的列表?
使用 keys() 獲取字典中的所有鍵
>>>mydict={'a':1,'b':2,'c':3,'e':5}
>>> mydict.keys()
dict_keys(['a', 'b', 'c', 'e'])
32. 怎樣聲明多個(gè)變量并賦值?
一共有兩種方式:
>>> a,b,c=3,4,5 #This assigns 3,4, and 5 to a, b, and c respectively
>>> a=b=c=3 #This assigns 3 to a,b, and c
33. 元組的解封裝是什么?
首先我們來(lái)看解封裝:
>>> mytuple=3,4,5
>>> mytuple
(3, 4, 5)
這將 3,4,5 封裝到元組 mytuple 中。
現(xiàn)在我們將這些值解封裝到變量 x,y,z 中:
>>> x,y,z=mytuple
>>> x+y+z
得到結(jié)果12.
34. 解釋如何在Django中設(shè)置數(shù)據(jù)庫(kù)。
可以使用命令edit mysite /setting.py,它是一個(gè)普通的python模塊,模塊級(jí)別代表Django設(shè)置。
Django默認(rèn)使用SQLite;對(duì)于Django用戶來(lái)說(shuō)這很容易,因此不需要任何其他類型的安裝。如果您的數(shù)據(jù)庫(kù)選擇不同,則必須使用DATABASE'default'項(xiàng)中的以下鍵來(lái)匹配您的數(shù)據(jù)庫(kù)連接設(shè)置。
引擎:您可以使用'django.db.backends.sqlite3','django.db.backeneds.mysql','django.db.backends.postgresql_psycopg2','django.db.backends.oracle'等來(lái)更改數(shù)據(jù)庫(kù)
名稱:數(shù)據(jù)庫(kù)的名稱。如果您使用SQLite作為數(shù)據(jù)庫(kù),那么數(shù)據(jù)庫(kù)將是您計(jì)算機(jī)上的文件,Name應(yīng)該是完整的絕對(duì)路徑,包括該文件的文件名。
如果您沒(méi)有選擇SQLite作為數(shù)據(jù)庫(kù),則必須添加密碼,主機(jī),用戶等設(shè)置。Django使用SQLite作為默認(rèn)數(shù)據(jù)庫(kù),它將數(shù)據(jù)作為單個(gè)文件存儲(chǔ)在文件系統(tǒng)中。如果你有數(shù)據(jù)庫(kù)服務(wù)器-PostgreSQL,MySQL,Oracle,MSSQL-并且想要使用它而不是SQLite,那么使用數(shù)據(jù)庫(kù)的管理工具為你的Django項(xiàng)目創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)。無(wú)論哪種方式,在您的(空)數(shù)據(jù)庫(kù)到位的情況下,剩下的就是告訴Django如何使用它。這是項(xiàng)目的settings.py文件的來(lái)源。
我們將添加以下代碼行文件:
DATABASES = {
'default': {
'ENGINE' : 'django.db.backends.sqlite3',
'NAME' : os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
35. 如何獲取任何網(wǎng)址或網(wǎng)頁(yè)的Google緩存時(shí)限?
使用以下URL格式:
http://webcache.googleusercontent.com/search?q=cache:URLGOESHERE
請(qǐng)務(wù)必將“URLGOESHERE”替換為要檢索其緩存的頁(yè)面或站點(diǎn)的正確Web地址,并查看時(shí)間。例如,要查看edureka.co的Google Webcache年齡,您需要使用以下網(wǎng)址:
http://webcache.googleusercontent.com/search?q=cache:edureka.co
36. 什么是Python中的map函數(shù)?
Map函數(shù)執(zhí)行作為第一個(gè)參數(shù)給出的函數(shù),該函數(shù)遍歷第二個(gè)參數(shù)給出的迭代的所有元素的。如果給定的函數(shù)包含多于1個(gè)參數(shù),則給出了許多迭代。
37. 如何在NumPy數(shù)組中獲得N個(gè)最大值的索引?
我們可以使用以下代碼獲取NumPy數(shù)組中N個(gè)最大值的索引:
import numpy as np
arr = np.array([1, 3, 2, 4, 5])
print(arr.argsort()[-3:][::-1])
輸出
[ 4 3 1 ]
38. 你如何用Python /NumPy計(jì)算百分位數(shù)?
我們可以使用以下代碼計(jì)算百分位數(shù)
import numpy as np
a = np.array([1,2,3,4,5])
p = np.percentile(a, 50) #Returns 50th percentile, e.g. median
print(p)
輸出
3
39. NumPy陣列(arrays)相對(duì)(嵌套)Python列表(lists)有哪些優(yōu)勢(shì)?
a. Python的列表是高效的general-purpose容器。它們支持(相當(dāng))有效的插入,刪除,追加和連接,Python的list comprehension使它們易于構(gòu)造和操作。
b. Python列表的一些限制:它們不支持向量化“vectorized”操作,如元素加法和乘法,并且它們可以包含不同類型的對(duì)象這一事實(shí)意味著Python必須存儲(chǔ)每個(gè)元素的類型信息,并且必須在每個(gè)元素上操作時(shí)執(zhí)行類型調(diào)度代碼。
c. NumPy不僅效率更高;它也更方便。你可以免費(fèi)獲得大量的向量和矩陣運(yùn)算,這有時(shí)可以避免不必要的工作。
d. NumPy數(shù)組更快,你可以使用NumPy,F(xiàn)FT,卷積,快速搜索,基本統(tǒng)計(jì),線性代數(shù),直方圖等內(nèi)置方法。
40. NumPy和SciPy有什么區(qū)別?
a. 在理想的世界中,NumPy只包含數(shù)組數(shù)據(jù)類型和最基本的操作:索引,排序,重塑,基本元素函數(shù)等。
b. 所有數(shù)字代碼都將駐留在SciPy中。但是,NumPy的一個(gè)重要目標(biāo)是兼容性,因此NumPy試圖保留其前任任何一個(gè)支持的所有功能。
c. 因此,NumPy包含一些線性代數(shù)函數(shù),即使它們更恰當(dāng)?shù)貙儆赟ciPy。無(wú)論如何,SciPy包含更多功能更全版本的線性代數(shù)模塊,以及許多其他數(shù)值算法。
d. 如果你使用python進(jìn)行科學(xué)計(jì)算,你應(yīng)該安裝NumPy和SciPy。大多數(shù)新功能屬于SciPy而非NumPy。
41. python程序中文輸出問(wèn)題怎么解決?
用encode和decode,如:
import os.path
import xlrd,sys
Filename=’/home/tom/Desktop/1234.xls’
if not os.path.isfile(Filename):
raise NameError,”%s is not a valid filename”%Filename
bk=xlrd.open_workbook(Filename)
shxrange=range(bk.nsheets)
print shxrange
for x in shxrange:
p=bk.sheets()[x].name.encode(‘utf-8′)
print p.decode(‘utf-8′)
方法二:
在文件開(kāi)頭加上
reload(sys)
sys.setdefaultencoding(‘utf8′)
42. 閱讀下面的代碼,它的輸出結(jié)果是什么?
class A(object):
def go(self):
print "go A go!"
def stop(self):
print "stop A stop!"
def pause(self):
raise Exception("Not Implemented")
class B(A):
def go(self):
super(B, self).go()
print "go B go!"
class C(A):
def go(self):
super(C, self).go()
print "go C go!"
def stop(self):
super(C, self).stop()
print "stop C stop!"
class D(B,C):
def go(self):
super(D, self).go()
print "go D go!"
def stop(self):
super(D, self).stop()
print "stop D stop!"
def pause(self):
print "wait D wait!"
class E(B,C): pass
a = A()
b = B()
c = C()
d = D()
e = E()
# 說(shuō)明下列代碼的輸出結(jié)果
a.go()
b.go()
c.go()
d.go()
e.go()
a.stop()
b.stop()
c.stop()
d.stop()
e.stop()
a.pause()
b.pause()
c.pause()
d.pause()
e.pause()
答案,輸出結(jié)果以注釋的形式表示:
a.go()
# go A go!
b.go()
# go A go!
# go B go!
c.go()
# go A go!
# go C go!
d.go()
# go A go!
# go C go!
# go B go!
# go D go!
e.go()
# go A go!
# go C go!
# go B go!
a.stop()
# stop A stop!
b.stop()
# stop A stop!
c.stop()
# stop A stop!
# stop C stop!
d.stop()
# stop A stop!
# stop C stop!
# stop D stop!
e.stop()
# stop A stop!
a.pause()
# ... Exception: Not Implemented
b.pause()
# ... Exception: Not Implemented
c.pause()
# ... Exception: Not Implemented
d.pause()
# wait D wait!
e.pause()
# ...Exception: Not Implemented
43. 介紹一下Python中webbrowser的用法?
webbrowser模塊提供了一個(gè)高級(jí)接口來(lái)顯示基于Web的文檔,大部分情況下只需要簡(jiǎn)單的調(diào)用open()方法。
webbrowser定義了如下的異常:
exception webbrowser.Error, 當(dāng)瀏覽器控件發(fā)生錯(cuò)誤是會(huì)拋出這個(gè)異常
webbrowser有以下方法:
webbrowser.open(url[, new=0[,autoraise=1]])
這個(gè)方法是在默認(rèn)的瀏覽器中顯示url, 如果new = 0, 那么url會(huì)在同一個(gè)瀏覽器窗口下打開(kāi),如果new = 1, 會(huì)打開(kāi)一個(gè)新的窗口,如果new = 2, 會(huì)打開(kāi)一個(gè)新的tab, 如果autoraise =true, 窗口會(huì)自動(dòng)增長(zhǎng)。
webbrowser.open_new(url)
在默認(rèn)瀏覽器中打開(kāi)一個(gè)新的窗口來(lái)顯示url, 否則,在僅有的瀏覽器窗口中打開(kāi)url
webbrowser.open_new_tab(url)
在默認(rèn)瀏覽器中當(dāng)開(kāi)一個(gè)新的tab來(lái)顯示url,否則跟open_new()一樣
webbrowser.get([name])
根據(jù)name返回一個(gè)瀏覽器對(duì)象,如果name為空,則返回默認(rèn)的瀏覽器
webbrowser.register(name, construtor[,instance])
注冊(cè)一個(gè)名字為name的瀏覽器,如果這個(gè)瀏覽器類型被注冊(cè)就可以用get()方法來(lái)獲取。
44. Python中, list, tuple, dict, set有什么區(qū)別, 主要應(yīng)用在什么樣的場(chǎng)景?
定義:
list:鏈表, 有序的項(xiàng)目, 通過(guò)索引進(jìn)行查找, 使用方括號(hào)"[]";
tuple:元組, 元組將多樣的對(duì)象集合到一起, 不能修改, 通過(guò)索引進(jìn)行查找, 使用括號(hào)"()";
dict:字典, 字典是一組鍵(key)和值(value)的組合, 通過(guò)鍵(key)進(jìn)行查找, 沒(méi)有順序, 使用大括號(hào)"{}";
set: 集合,無(wú)序, 元素只出現(xiàn)一次, 自動(dòng)去重, 使用"set([])";
應(yīng)用場(chǎng)景:
list, 簡(jiǎn)單的數(shù)據(jù)集合, 可以使用索引;
tuple, 把一些數(shù)據(jù)當(dāng)做一個(gè)整體去使用, 不能修改;
dict, 使用鍵值和值進(jìn)行關(guān)聯(lián)的數(shù)據(jù);
set, 數(shù)據(jù)只出現(xiàn)一次, 只關(guān)心數(shù)據(jù)是否出現(xiàn), 不關(guān)心其位置;
代碼:
mylist = [1, 2, 3, 4, 'Oh']
mytuple = (1, 2, 'Hello', (4, 5))
mydict = {'Wang' : 1, 'Hu' : 2, 'Liu' :4}
myset = set(['Wang', 'Hu', 'Liu', 4,'Wang'])
45. 寫(xiě)一個(gè)函數(shù), 輸入一個(gè)字符串, 返回倒序排列的結(jié)果: 如:string_reverse(‘a(chǎn)bcdef’), 返回: ‘fedcba’ (請(qǐng)采用多種方法實(shí)現(xiàn), 并對(duì)實(shí)現(xiàn)方法進(jìn)行比較)。
解答: 5種方法的比較.
1. 簡(jiǎn)單的步長(zhǎng)為-1, 即字符串的翻轉(zhuǎn);
2. 交換前后字母的位置;
3. 遞歸的方式, 每次輸出一個(gè)字符;
4. 雙端隊(duì)列, 使用extendleft()函數(shù);
5. 使用for循環(huán), 從左至右輸出;
代碼:
string = 'abcdef'
def string_reverse1(string):
return string[::-1]
def string_reverse2(string):
t= list(string)
l= len(t)
for i,j in zip(range(l-1, 0, -1), range(l//2)):
t[i], t[j] = t[j], t[i]
return "".join(t)
def string_reverse3(string):
if len(string)
return string
return string_reverse3(string[1:]) + string[0]
from collections import deque
def string_reverse4(string):
d= deque()
d.extendleft(string)
return ''.join(d)
def string_reverse5(string):
#return ''.join(string[len(string) - i] for i in range(1,len(string)+1))
return ''.join(string[i] for i in range(len(string)-1, -1, -1))
print(string_reverse1(string))
print(string_reverse2(string))
print(string_reverse3(string))
print(string_reverse4(string))
print(string_reverse5(string))
46. 以下哪個(gè)語(yǔ)句創(chuàng)建字典? (多個(gè)正確的答案可能)
a)d = {}
b)d = {“john”:40,“peter”:45}
c)d = {40:“john”,45:“peter”}
d)d =(40:“john”,45:“50”)
回答:b,c, d。通過(guò)指定鍵和值來(lái)創(chuàng)建字典。
47. 其中哪一個(gè)是floor division?
a) /
b)//
C) %
d)沒(méi)有提到的
回答:b)//;例如,5.0/2 = 2.5,5.0//2 = 2
48. 標(biāo)識(shí)符的最大可能長(zhǎng)度是多少?
a)31個(gè)字符
b)63個(gè)字符
c)79個(gè)字符
d)以上都不是
回答:d)以上都不是;標(biāo)識(shí)符可以是任意長(zhǎng)度。
49. 為什么不鼓勵(lì)以下劃線開(kāi)頭的局部變量名?
a)它們用于表示類的私有變量
b)他們混淆了口譯員
c)它們用于表示全局變量
d)他們放慢執(zhí)行速度
回答:a)它們用于表示類的私有變量;由于Python沒(méi)有私有變量的概念,因此前導(dǎo)下劃線用于表示不能從類外部訪問(wèn)的變量。
50. 以下哪項(xiàng)是無(wú)效聲明?
a)abc = 1,000,000
b)a b c = 1000 2000 3000
c)a,b,c = 1000,2000,3000
d)a_b_c = 1,000,000
回答:b)a b c = 1000 2000 3000;變量名稱中不允許使用空格。
51. 以下哪項(xiàng)是無(wú)效聲明?
a)abc = 1,000,000
b)a b c = 1000 2000 3000
c)a,b,c = 1000,2000,3000
d)a_b_c = 1,000,000
回答:b)a b c = 1000 2000 3000;變量名稱中不允許使用空格。
52. 以下是什么輸出?
try:
if '1' != 1:
raise "someError"
else:
print("someError has not occured")
except "someError":
print ("someError has occured")
a)發(fā)生了someError
b)沒(méi)有發(fā)生someError
c)無(wú)效代碼
d)以上都不是
回答:c)無(wú)效代碼;新的異常類必須從BaseException繼承。這里沒(méi)有這樣的繼承。
53. 假設(shè)list1是[2,33,222,14,25],什么是list1 [-1]?
a)錯(cuò)誤
b)沒(méi)有
c)25
d)2
回答:c)25;索引-1對(duì)應(yīng)于列表中的最后一個(gè)索引。
54. 要打開(kāi)文件c:/ scores.txt進(jìn)行編寫(xiě),我們使用:
a)outfile = open(“c:/scores.txt”,“r”)
b)outfile = open(“c://scores.txt”,“w”)
c)outfile = open(file = “c:/scores.txt”,“r”)
d)outfile = open(file = “c://scores.txt”,“o”)
回答:b)該位置包含雙斜杠(/$$,w用于指示正在寫(xiě)入文件。
55. 以下是什么輸出?
f = None
for i in range (5):
with open("data.txt", "w") as f:
if i > 2:
break
print f.closed
a)True
b)False
c)None
d)Error
回答:a)True;與open文件一起使用時(shí),WITH語(yǔ)句可確保在with塊退出時(shí)關(guān)閉文件對(duì)象。
56. 何時(shí)執(zhí)行try-except-else的else部分?
a)總是
b)發(fā)生異常時(shí)
c)沒(méi)有異常發(fā)生時(shí)
d)當(dāng)發(fā)生異常時(shí)至除了塊
回答:c)沒(méi)有異常發(fā)生時(shí);當(dāng)沒(méi)有異常發(fā)生時(shí),執(zhí)行else部分。
57. a=1, b=2, 不用中間變量交換a和b的值.
兩種形式: 加法或異或;代碼:
a = 1
b = 2
a = a + b
b = a - b
a = a - b
print ('a = {0}, b = {1}'.format(a,b))
a = a ^ b
b = a ^ b
a = a ^ b
print ('a = {0}, b = {1}'.format(a, b))
58. 請(qǐng)寫(xiě)出打印結(jié)果
x = [0, 1]
i = 0
i, x[i] = 1, 2
print(x)
打印結(jié)果: [0, 2], python可以使用連續(xù)賦值, 從左至右.
g = lambda x, y=2, z : x + y**z
g(1, z=10) = ?
打印結(jié)果: 異常, 形參表末尾才可以有默認(rèn)參數(shù), z需要提供默認(rèn)參數(shù)。
59. A、B兩人分別在兩座島上。B生病了,A有B所需要的藥。C有一艘小船和一個(gè)可以上鎖的箱子。C愿意在A和B之間運(yùn)東西,但東西只能放在箱子里。只要箱子沒(méi)被上鎖,C都會(huì)偷走箱子里的東西,不管箱子里有什么。如果A和B各自有一把鎖和只能開(kāi)自己那把鎖的鑰匙,A應(yīng)該如何把東西安全遞交給B?
答案:A把藥放進(jìn)箱子,用自己的鎖把箱子鎖上。B拿到箱子后,再在箱子上加一把自己的鎖。箱子運(yùn)回A后,A取下自己的鎖。箱子再運(yùn)到B手中時(shí),B取下自己的鎖,獲得藥物。
60. 有25匹馬,速度都不同,但每匹馬的速度都是定值。現(xiàn)在只有5條賽道,無(wú)法計(jì)時(shí),即每賽一場(chǎng)最多只能知道5匹馬的相對(duì)快慢。問(wèn)最少賽幾場(chǎng)可以找出25匹馬中速度最快的前3名?
答案:每匹馬都至少要有一次參賽的機(jī)會(huì),所以25匹馬分成5組,一開(kāi)始的這5場(chǎng)比賽是免不了的。接下來(lái)要找冠軍也很容易,每一組的冠軍在一起賽一場(chǎng)就行了(第6場(chǎng))。最后就是要找第2和第3名。我們按照第6場(chǎng)比賽中得到的名次依次把它們?cè)谇?場(chǎng)比賽中所在的組命名為A、B、C、D、E。即:A組的冠軍是第6場(chǎng)的第1名,B組的冠軍是第6場(chǎng)的第2名……每一組的5匹馬按照他們已經(jīng)賽出的成績(jī)從快到慢編號(hào):
A組:1,2,3,4,5
B組:1,2,3,4,5
C組:1,2,3,4,5
D組:1,2,3,4,5
E組:1,2,3,4,5
從現(xiàn)在所得到的信息,我們可以知道哪些馬已經(jīng)被排除在3名以外。只要已經(jīng)能確定有3匹或3匹以上的馬比這匹馬快,那么它就已經(jīng)被淘汰了。可以看到,只有上表中粗體藍(lán)色的那5匹馬才有可能為2、3名的。即:A組的2、3名;B組的1、2名,C組的第1名。取這5匹馬進(jìn)行第7場(chǎng)比賽,第7場(chǎng)比賽的前兩名就是25匹馬中的2、3名。故一共最少要賽7場(chǎng)。
編輯:hfy
評(píng)論
查看更多