python面試題大全(一)

python面試題大全(一)

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供金鄉(xiāng)網(wǎng)站建設、金鄉(xiāng)做網(wǎng)站、金鄉(xiāng)網(wǎng)站設計、金鄉(xiāng)網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、金鄉(xiāng)企業(yè)網(wǎng)站模板建站服務,10余年金鄉(xiāng)做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。

最近開始整理python的資料,博主建立了一個qq群,希望給大家提供一個交流的同平臺 938587844 。

1. (1)python下多線程的限制以及多進程中傳遞參數(shù)的方式

python多線程有個全局解釋器鎖(global interpreter lock),這個鎖的意思是任一時間只能有一個線程使用解釋器,跟單cpu跑多個程序一個意思,大家都是輪著用的,這叫“并發(fā)”,不是“并行”。
多進程間共享數(shù)據(jù),可以使用 multiprocessing.Value 和 multiprocessing.Array.

(2)python多線程與多進程的區(qū)別  
在UNIX平臺上,當某個進程終結(jié)之后,該進程需要被其父進程調(diào)用wait,否則進程成為僵尸進程(Zombie)。所以,有必要對每個Process對象調(diào)用join()方法 (實際上等同于wait)。對于多線程來說,由于只有一個進程,所以不存在此必要性。
多進程應該避免共享資源。在多線程中,我們可以比較容易地共享資源,比如使用全局變量或者傳遞參數(shù)。在多進程情況下,由于每個進程有自己獨立的內(nèi)存空間,以上方法并不合適。此時我們可以通過共享內(nèi)存和Manager的方法來共享資源。但這樣做提高了程序的復雜度,并因為同步的需要而降低了程序的效率。

2.Python是如何進行內(nèi)存管理的?

Python引用了一個內(nèi)存池(memory pool)機制,即Pymalloc機制(malloc:n.分配內(nèi)存),用于管理對小塊內(nèi)存的申請和釋放
內(nèi)存池(memory pool)的概念
當 創(chuàng)建大量消耗小內(nèi)存的對象時,頻繁調(diào)用new/malloc會導致大量的內(nèi)存碎片,致使效率降低。內(nèi)存池的概念就是預先在內(nèi)存中申請一定數(shù)量的,大小相等 的內(nèi)存塊留作備用,當有新的內(nèi)存需求時,就先從內(nèi)存池中分配內(nèi)存給這個需求,不夠了之后再申請新的內(nèi)存。這樣做最顯著的優(yōu)勢就是能夠減少內(nèi)存碎片,提升效率。
內(nèi)存池的實現(xiàn)方式有很多,性能和適用范圍也不一樣。
python中的內(nèi)存管理機制——Pymalloc
python中的內(nèi)存管理機制都有兩套實現(xiàn),一套是針對小對象,就是大小小于256bits時,pymalloc會在內(nèi)存池中申請內(nèi)存空間;當大于256bits,則會直接執(zhí)行new/malloc的行為來申請內(nèi)存空間。
關于釋放內(nèi)存方面,當一個對象的引用計數(shù)變?yōu)?時,python就會調(diào)用它的析構函數(shù)。在析構時,也采用了內(nèi)存池機制,從內(nèi)存池來的內(nèi)存會被歸還到內(nèi)存池中,以避免頻繁地釋放動作。

3.什么是lambda函數(shù)?它有什么好處?

lambda 函數(shù)是一個可以接收任意多個參數(shù)(包括可選參數(shù))并且返回單個表達式值的函數(shù)。 lambda 函數(shù)不能包含命令,它們所包含的表達式不能超過一個。不要試圖向lambda 函數(shù)中塞入太多的東西;如果你需要更復雜的東西,應該定義一個普通函數(shù),然后想讓它多長就多長。

4.如何用Python輸出一個Fibonacci數(shù)列?

a,b = 0, 1
while b<100:
    print (b)
    a;b = b;a+b

5.介紹一下Python中webbrowser的用法?

webbrowser模塊提供了一個高級接口來顯示基于Web的文檔,大部分情況下只需要簡單的調(diào)用open()方法。
webbrowser定義了如下的異常:
exception webbrowser.Error, 當瀏覽器控件發(fā)生錯誤是會拋出這個異常
webbrowser有以下方法:
webbrowser.open(url[, new=0[, autoraise=1]])
這個方法是在默認的瀏覽器中顯示url, 如果new = 0, 那么url會在同一個瀏覽器窗口下打開,如果new = 1, 會打開一個新的窗口,如果new = 2, 會打開一個新的tab, 如果autoraise = true, 窗口會自動增長。
webbrowser.open_new(url)
在默認瀏覽器中打開一個新的窗口來顯示url, 否則,在僅有的瀏覽器窗口中打開url
webbrowser.open_new_tab(url)
在默認瀏覽器中當開一個新的tab來顯示url, 否則跟open_new()一樣
webbrowser.get([name]) 根據(jù)name返回一個瀏覽器對象,如果name為空,則返回默認的瀏覽器
webbrowser.register(name, construtor[, instance])
注冊一個名字為name的瀏覽器,如果這個瀏覽器類型被注冊就可以用get()方法來獲取。

6.解釋一下python的and-or語法

與C表達式 bool ? a : b類似,但是bool and a or b,當 a 為假時,不會象C表達式 bool ? a : b 一樣工作
應該將 and-or 技巧封裝成一個函數(shù):

def choose(bool, a, b):
    return (bool and [a] or [b])[0]

因為 [a] 是一個非空列表,它永遠不會為假。甚至 a 是 0 或 '' 或其它假值,列表[a]為真,因為它有一個元素。

7.how do I iterate over a sequence in reverse order

for x in reversed(sequence):
    ... # do something with x..

如果不是list, 最通用但是稍慢的解決方案是:

for i in range(len(sequence)-1, -1, -1):
    x = sequence[i]
    <do something with x>

8.Python是如何進行類型轉(zhuǎn)換的?

最近開始整理python的資料,博主建立了一個qq群,希望給大家提供一個交流的同平臺 938587844 。

函數(shù)                      描述
int(x [,base ])         將x轉(zhuǎn)換為一個整數(shù)
long(x [,base ])        將x轉(zhuǎn)換為一個長整數(shù)
float(x )               將x轉(zhuǎn)換到一個浮點數(shù)
complex(real [,imag ])  創(chuàng)建一個復數(shù)
str(x )                 將對象 x 轉(zhuǎn)換為字符串
repr(x )                將對象 x 轉(zhuǎn)換為表達式字符串
eval(str )              用來計算在字符串中的有效Python表達式,并返回一個對象
tuple(s )               將序列 s 轉(zhuǎn)換為一個元組
list(s )                將序列 s 轉(zhuǎn)換為一個列表
chr(x )                 將一個整數(shù)轉(zhuǎn)換為一個字符
unichr(x )              將一個整數(shù)轉(zhuǎn)換為Unicode字符
ord(x )                 將一個字符轉(zhuǎn)換為它的整數(shù)值
hex(x )                 將一個整數(shù)轉(zhuǎn)換為一個十六進制字符串
oct(x )                 將一個整數(shù)轉(zhuǎn)換為一個八進制字符串

9.Python里面如何實現(xiàn)tuple和list的轉(zhuǎn)換?

>>> l = tuple(iplist)
>>> print l
('217.169.209.2:6666', '192.227.139.106:7808', '110.4.12.170:83', '69.197.132.80:7808', '205.164.41.101:3128', '63.141.249.37:8089', '27.34.142.47:9090')
>>> t = list(l)
>>> print t
['217.169.209.2:6666', '192.227.139.106:7808', '110.4.12.170:83', '69.197.132.80:7808', '205.164.41.101:3128', '63.141.249.37:8089', '27.34.142.47:9090']

10.請寫出一段Python代碼實現(xiàn)刪除一個list里面的重復元素

>>> l = [1,1,2,3,4,5,4]
>>> list(set(l))
[1, 2, 3, 4, 5]
或者
d = {}
for x in mylist:
    d[x] = 1
mylist = list(d.keys())

11.Python如何實現(xiàn)單例模式?其他23種設計模式python如何實現(xiàn)?

#使用__metaclass__(元類)的高級python用法  
class Singleton2(type):  
    def __init__(cls, name, bases, dict):  
        super(Singleton2, cls).__init__(name, bases, dict)  
        cls._instance = None  
    def __call__(cls, *args, **kw):  
        if cls._instance is None:  
            cls._instance = super(Singleton2, cls).__call__(*args, **kw)  
        return cls._instance  

class MyClass3(object):  
    __metaclass__ = Singleton2  

one = MyClass3()  
two = MyClass3()  

two.a = 3  
print one.a  
#3  
print id(one)  
#31495472  
print id(two)  
#31495472  
print one == two  
#True  
print one is two  
#True
#使用裝飾器(decorator),  
#這是一種更pythonic,更elegant的方法,  
#單例類本身根本不知道自己是單例的,因為他本身(自己的代碼)并不是單例的  
def singleton(cls, *args, **kw):  
    instances = {}  
    def _singleton():  
        if cls not in instances:  
            instances[cls] = cls(*args, **kw)  
        return instances[cls]  
    return _singleton  

@singleton  
class MyClass4(object):  
    a = 1  
    def __init__(self, x=0):  
        self.x = x  

one = MyClass4()  
two = MyClass4()  

two.a = 3  
print one.a  
#3  
print id(one)  
#29660784  
print id(two)  
#29660784  
print one == two  
#True  
print one is two  
#True  
one.x = 1  
print one.x  
#1  
print two.x  
#1

12.Python里面如何拷貝一個對象?

標準庫中的copy模塊提供了兩個方法來實現(xiàn)拷貝.一個方法是copy,它返回和參數(shù)包含內(nèi)容一樣的對象.
使用deepcopy方法,對象中的屬性也被復制。

13.介紹一下except的用法和作用?

Python的except用來捕獲所有異常,因為Python里面的每次錯誤都會拋出一個異常,所以每個程序的錯誤都被當作一個運行時錯誤。

14.Python中pass語句的作用是什么?

pass語句什么也不做,一般作為占位符或者創(chuàng)建占位程序,pass語句不會執(zhí)行任何操作

15.如何知道一個python對象的類型?

type()

16.介紹一下Python下range()函數(shù)的用法?

range(start, stop[, step])

17.如何用Python來進行查詢和替換一個文本字符串?

可以使用sub()方法來進行查詢和替換,sub方法的格式為:sub(replacement, string[, count=0])
replacement是被替換成的文本
string是需要被替換的文本
count是一個可選參數(shù),指最大被替換的數(shù)量

18.Python里面search()和match()的區(qū)別?

match()函數(shù)只檢測RE是不是在string的開始位置匹配,search()會掃描整個string查找匹配, 也就是說match()只有在0位置匹配成功的話才有返回,如果不是開始位置匹配成功的話,match()就返回none

19.用Python匹配HTML tag的時候,<.>和<.?>有什么區(qū)別?

前者是貪婪匹配,會從頭到尾匹配 <a>xyz</a>,而后者是非貪婪匹配,只匹配到第一個 >。

20.Python里面如何生成隨機數(shù)?

import random
random.random()

它會返回一個隨機的0和1之間的浮點數(shù)

21.如何用Python來發(fā)送郵件?

python實現(xiàn)發(fā)送和接收郵件功能主要用到poplib和smtplib模塊。

poplib用于接收郵件,而smtplib負責發(fā)送郵件。

代碼如下:

#! /usr/bin/env python
#coding=utf-8
import sys 
import time 
import poplib 
import smtplib 
#郵件發(fā)送函數(shù)
def send_mail(): 
     try: 
        handle = smtplib.SMTP('smtp.126.com',25) 
        handle.login('XXXX@126.com','**********') 
        msg = 'To: XXXX@qq.com\r\nFrom:XXXX@126.com\r\nSubject:hello\r\n'
        handle.sendmail('XXXX@126.com','XXXX@qq.com',msg) 
        handle.close() 
        return 1
    except: 
        return 0
#郵件接收函數(shù)
def accpet_mail(): 
    try: 
        p=poplib.POP3('pop.126.com') 
        p.user('pythontab@126.com') 
        p.pass_('**********') 
        ret = p.stat() #返回一個元組:(郵件數(shù),郵件尺寸) 
       #p.retr('郵件號碼')方法返回一個元組:(狀態(tài)信息,郵件,郵件尺寸)   
    except poplib.error_proto,e: 
        print "Login failed:",e 
        sys.exit(1)

#運行當前文件時,執(zhí)行sendmail和accpet_mail函數(shù)
if __name__ == "__main__": 
    send_mail() 
    accpet_mail()

【搜索圓方圓,獲得“python教程”,“python下載”,“python入門”類相關信息?!?/p>

文章標題:python面試題大全(一)
轉(zhuǎn)載注明:http://muchs.cn/article34/picppe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供面包屑導航網(wǎng)站營銷、企業(yè)網(wǎng)站制作網(wǎng)站改版、網(wǎng)站設計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設網(wǎng)站維護公司