亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python基礎(chǔ)面試20題

  發(fā)布時(shí)間:2020-03-24 16:11:39   作者:劉東靈   我要評(píng)論
這篇文章主要介紹了Python基礎(chǔ)面試20題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

最近python是真的火,加上有許多公司都在招python方面的程序員,而網(wǎng)上的面試題又總是千篇一律復(fù)制粘貼,在這里博主打算自己寫(xiě)一些python的一些面試題一些是我遇到的,覺(jué)得還不錯(cuò),一些是python必須知道的一些知識(shí)點(diǎn)。相應(yīng)的,自己也在python這條路上,努力做的更好,也希望在測(cè)試自己同時(shí)幫到更多的小白和從別的語(yǔ)言轉(zhuǎn)過(guò)來(lái)的同行們,如果大家喜歡,我會(huì)在以后繼續(xù)拓展更多的面試題的篇幅,在基礎(chǔ)篇中,我將僅僅提到關(guān)于python的基礎(chǔ)。在python基礎(chǔ)中,很明顯我們需要了解python的特性,像面向?qū)ο笏枷耄址牟僮?,推?dǎo)式,實(shí)例化,多線程多進(jìn)程以及初始化這些都是必須了解的。

##1.在python中,如何交換兩個(gè)變量的值?

這個(gè)問(wèn)題,考了python特殊的語(yǔ)法,也就是a, b = b, a,這個(gè)表達(dá)式,也是其他語(yǔ)言所沒(méi)有的,是只有python自帶的。

##2. 字符串的拼接–如何高效的拼接兩個(gè)字符串?

我們都知道python中,拼接字符串可以用”+”來(lái)拼接,然而這個(gè)方法并不是高效的,因?yàn)槿绻枰唇拥淖址泻芏?n個(gè))的情況下,使用”+”的話,python解釋器會(huì)申請(qǐng)n-1次內(nèi)存空間,然后進(jìn)行拷貝,因?yàn)樽址趐ython中是不可變的,所以當(dāng)進(jìn)行拼接的時(shí)候,會(huì)需要申請(qǐng)一個(gè)新的內(nèi)存空間。所以,正確答案是,使用.join(list),因?yàn)樗皇褂昧艘淮蝺?nèi)存空間。

##3. list = [a,a,a,1,2,3,4,5,A,B,C]提取出”12345”

這個(gè)考點(diǎn)考了python的解壓賦值的知識(shí)點(diǎn),即 a,b,c,*middle, e,f,g = list, *middle = [1,2,3,4,5]。注意,解壓賦值提取出來(lái)的是列表。

##4. python的面向?qū)ο螅?/strong>

類是對(duì)象的藍(lán)圖和模板,而對(duì)象是類的實(shí)例。類是抽象的概念,而對(duì)象是具體的東西。在面向?qū)ο缶幊痰氖澜缰?,一切皆為?duì)象,對(duì)象都有屬性和行為,每個(gè)對(duì)象都是獨(dú)一無(wú)二的,而且對(duì)象一定屬于某個(gè)類(型)。當(dāng)我們把一大堆擁有共同特征的對(duì)象的靜態(tài)特征(屬性)和動(dòng)態(tài)特征(行為)都抽取出來(lái)后,就可以定義出一個(gè)叫做“類”的東西。面向?qū)ο笥腥笾е悍庋b、繼承和多態(tài)。

##5. 什么是元類?

同上,我們講到在python中皆為對(duì)象,而元類即是用來(lái)創(chuàng)建類的”東西”。類也是元類的實(shí)例。而在python中,它們要么是類的實(shí)例,要么是元類的實(shí)例,除了type。type實(shí)際上是它自己的元類。元類主要的用途是用來(lái)創(chuàng)建API,比如django的ORM。

##6.python的search和match知識(shí)點(diǎn)?

search和match都在re模塊中,match只匹配字符串的開(kāi)始,如果字符串開(kāi)始不符合正則表達(dá)式,則匹配失敗,函數(shù)返回None。search匹配整個(gè)字符串,直到找到一個(gè)匹配。

##7. python中深淺拷貝的區(qū)別?
淺拷貝沒(méi)有拷貝子對(duì)象,所以原對(duì)象發(fā)生改變,其子對(duì)象也發(fā)生了改變,而深拷貝拷貝了子對(duì)象,原對(duì)象發(fā)生改變,其本身也不會(huì)改變。具體的可以看我之前的博客python深淺copy一分鐘掌握

##8. 類的初始化:new() 和 init()?

new()方法用來(lái)實(shí)例化最終的類對(duì)象,在類創(chuàng)建之前被調(diào)用,它在類的主體被執(zhí)行完后開(kāi)始執(zhí)行。
init()方法是在類被創(chuàng)建之后被調(diào)用,用來(lái)執(zhí)行其他的一些輸出化工作
當(dāng)我們構(gòu)造元類的時(shí)候,通常只需要定一個(gè)init()或new()方法,但不是兩個(gè)都定義。但是,如果需要接受其他的關(guān)鍵詞參數(shù)的話,這兩個(gè)方法就要同時(shí)提供,并且都要提供對(duì)應(yīng)的參數(shù)簽名。

##9.類的初始化?

B類繼承A類,在B類自己的基礎(chǔ)上可以調(diào)用A類所有方法,如果A,B同時(shí)擁有init, B會(huì)改寫(xiě)A中的init方法,A類的方法失效。
Super函數(shù)可以調(diào)用A類中的屬性,B類中有同名屬性時(shí),覆蓋A類中的同名屬性。但調(diào)用函數(shù)時(shí),總是先查找它自身的定義,如果沒(méi)有定義,則順著繼承鏈向上插座,知道在某個(gè)父類中找到為止。
B類 init參數(shù)需大于或等于A 父類的init方法,因?yàn)閟uper初始化了,參數(shù)量為父類參數(shù)量。

##10.多線程?

多線程可以共享進(jìn)程的內(nèi)存空間,因此要實(shí)現(xiàn)多個(gè)線程之間的通信相對(duì)簡(jiǎn)單,比如設(shè)置一個(gè)全局變量,多個(gè)線程共享這個(gè)全局變量。但是當(dāng)多個(gè)線程共享一個(gè)資源的時(shí)候,可能導(dǎo)致程序失效甚至崩潰,如果一個(gè)資源被多個(gè)線程競(jìng)爭(zhēng)使用,那么對(duì)臨界資源的訪問(wèn)需要加上保護(hù),否則會(huì)處于“混亂”狀態(tài),比如銀行存100塊錢,最終很可能存不到一百塊多個(gè)線程得到的余額狀態(tài)都是0,所有操作都是在0上面加1,從而導(dǎo)致錯(cuò)誤結(jié)果。這種情況下,鎖就可以得到用處了。多線程并不能發(fā)揮cpu多核特性,因?yàn)閜ython解釋器有一個(gè)gil鎖,任何線程執(zhí)行前必須獲得GIL鎖,然后每執(zhí)行100條字節(jié)碼,解釋器就會(huì)自動(dòng)釋放GIL鎖讓別的線程有機(jī)會(huì)執(zhí)行。

##11.python內(nèi)存管理?

python內(nèi)部使用引用計(jì)數(shù),來(lái)保持追蹤內(nèi)存中的對(duì)象,Python內(nèi)部記錄了對(duì)象有多少個(gè)引用,即引用計(jì)數(shù),當(dāng)對(duì)象被創(chuàng)建時(shí)就創(chuàng)建了一個(gè)引用計(jì)數(shù),當(dāng)對(duì)象不再需要時(shí),這個(gè)對(duì)象的引用計(jì)數(shù)為0時(shí),它被垃圾回收。所有這些都是自動(dòng)完成,不需要像C一樣,人工干預(yù),從而提高了程序員的效率和程序的健壯性。

##12.python的filter方法?

filter就像map,reduce,apply,zip等都是內(nèi)置函數(shù),用C語(yǔ)言實(shí)現(xiàn),具有速度快,功能強(qiáng)大等 優(yōu)點(diǎn)。
用于過(guò)濾與函數(shù)func()不匹配的值, 類似于SQL中select value != ‘a’
相當(dāng)于一個(gè)迭代器,調(diào)用一個(gè)布爾函數(shù)func來(lái)迭代seq中的每個(gè)元素,返回一個(gè)是bool_seq返 回為T(mén)rue的序列
第一個(gè)參數(shù): function or None, 函數(shù)或None
第二個(gè)參數(shù): sequence,序列

##13. 字符串的查詢替換?

考點(diǎn):python的find和replace函數(shù)。
給定一串字符串:

string = 'life is short, I use python'
# 返回的為0或正數(shù)時(shí),為其索引號(hào)
>>> string.find('life')
string.replace('short','long')
# replace 將short替換為long
>>> life is long, I use python

##14.給定一串排好序的列表,打亂這個(gè)函數(shù)?

這個(gè)題考了python里的shuffle函數(shù)的用法。

# random模塊中的shuffle(洗牌函數(shù))  
    import random  
    list = [1, 2, 3, 4]  
    random.shuffle(list)     
    print(list)

##15. 裝飾器?

裝飾器是一個(gè)函數(shù),接收一個(gè)函數(shù)返回另一個(gè)函數(shù)。用法如下:

import time
from functools import wraps

def timethis(func):
    '''
    Decorator that reports the execution time.
    '''
    @wraps(func)
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(func.__name__, end-start)
        return result
    return wrapper
@timethis
def countdown(n):
     '''
    Counts down
     '''
     while n > 0:
         n -= 1

>>> countdown(100000)
countdown 0.008917808532714844
>>> countdown(10000000)
countdown 0.87188299392912”

##16.給定一串字典(或列表),找出指定的(前N個(gè))最大值?最小值?

這道題的考點(diǎn)是python內(nèi)的heapq模塊的nlargest() 和 nsmallest(), 而不是min()和max()。這兩個(gè)函數(shù)都能接收關(guān)鍵字參數(shù),用于復(fù)雜的結(jié)構(gòu)數(shù)據(jù)中:

portfolio = [
    {'name': 'IBM', 'shares': 100, 'price': 91.1},
    {'name': 'AAPL', 'shares': 50, 'price': 543.22},
    {'name': 'FB', 'shares': 200, 'price': 21.09},
    {'name': 'HPQ', 'shares': 35, 'price': 31.75},
    {'name': 'YHOO', 'shares': 45, 'price': 16.35},
    {'name': 'ACME', 'shares': 75, 'price': 115.65}
]
# 參數(shù)3為最大的3個(gè)值(最小的3個(gè)值)
cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price'])
expensive = heapq.nlargest(3, portfolio, key=lambda s: s['price'])
# 上面代碼在對(duì)每個(gè)元素進(jìn)行對(duì)比的時(shí)候,會(huì)以price的值進(jìn)行比較。

##17. python實(shí)現(xiàn)單例模式?

這個(gè)題考的是python中對(duì)單例模式的理解和運(yùn)用,有4個(gè)方法實(shí)現(xiàn)單例模式:

#方法1,實(shí)現(xiàn)__new__方法  
    #并在將一個(gè)類的實(shí)例綁定到類變量_instance上,  
    #如果cls._instance為None說(shuō)明該類還沒(méi)有實(shí)例化過(guò),實(shí)例化該類,并返回  
    #如果cls._instance不為None,直接返回cls._instance  
  class Singleton(object):  
      def __new__(cls, *args, **kw):  
          if not hasattr(cls, '_instance'):  
              orig = super(Singleton, cls)  
              cls._instance = orig.__new__(cls, *args, **kw)  
          return cls._instance  

  class MyClass(Singleton):  
      a = 1  

  one = MyClass()  
  two = MyClass()  

  two.a = 3  
  print(one.a)  
  #3  
  #one和two完全相同,可以用id(), ==, is檢測(cè)  
  print(id(one))  
  #29097904  
  print(id(two))  
  #29097904  
  print(one == two)
  #True  
  print(one is two)  
  #True  

  print('----------------------方法2--------------------------') 
  #方法2,共享屬性;所謂單例就是所有引用(實(shí)例、對(duì)象)擁有相同的狀態(tài)(屬性)和行為(方法)  
  #同一個(gè)類的所有實(shí)例天然擁有相同的行為(方法),  
  #只需要保證同一個(gè)類的所有實(shí)例具有相同的狀態(tài)(屬性)即可  
  #所有實(shí)例共享屬性的最簡(jiǎn)單最直接的方法就是__dict__屬性指向(引用)同一個(gè)字典(dict)  
  #可參看:http://code.activestate.com/recipes/66531/  
  class Borg(object):  
      _state = {}  
      def __new__(cls, *args, **kw):  
          ob = super(Borg, cls).__new__(cls, *args, **kw)  
          ob.__dict__ = cls._state  
          return ob  

  class MyClass2(Borg):  
      a = 1  

  one = MyClass2()  
  two = MyClass2()  

  #one和two是兩個(gè)不同的對(duì)象,id, ==, is對(duì)比結(jié)果可看出  
  two.a = 3  
  print(one.a)
  #3  
  print(id(one))  
  #28873680  
  print(id(two))  
  #28873712  
  print(one == two)
  #False  
  print(one is two)  
  #False  
  #但是one和two具有相同的(同一個(gè)__dict__屬性),見(jiàn):  
  print(id(one.__dict__)) 
  #30104000  
  print(id(two.__dict__))  
  #30104000  

  print '----------------------方法3--------------------------'  
  #方法3:本質(zhì)上是方法1的升級(jí)(或者說(shuō)高級(jí))版  
  #使用__metaclass__(元類)的高級(jí)python用法  
  class Singleton2(type):  
      def __init__(cls, name, bases, dict):  
          super(Singleton2, cls).__init__(name, bases, dict)  
          if not hasattr(cls, '_instance'):
           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  

  print '----------------------方法4--------------------------'  
  #方法4:也是方法1的升級(jí)(高級(jí))版本,  
  #使用裝飾器(decorator),  
  #這是一種更pythonic,更elegant的方法,  
  #單例類本身根本不知道自己是單例的,因?yàn)樗旧?自己的代碼)并不是單例的  
  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 

##18. 實(shí)現(xiàn)一個(gè)斐波那契數(shù)列的生成器?

這道題的考點(diǎn)關(guān)鍵是生成器的yield關(guān)鍵字將一個(gè)普通函數(shù)改造成生成器函數(shù):

def fib(n):
    a, b = 0, 1
    for _ in range(n):
        a, b = b, a + b
        yield a

def main():
    for val in fib(20):
        print(val)
if __name__ == '__main__':
    main()

##19. 使用字符串拼接達(dá)到字幕滾動(dòng)效果?

import os
import time

def main():
    content = '曹查理的python面試集-基礎(chǔ)篇'
    while True:
        # 清理屏幕上的輸出
        os.system('cls')  # os.system('clear')
        print(content)
        # 休眠200毫秒
        time.sleep(0.2)
        content = content[1:] + content[0]


if __name__ == '__main__':
    main()

##20. 設(shè)計(jì)一個(gè)函數(shù)返回給定文件名的后綴?

這道題考了正則表達(dá)式的簡(jiǎn)單知識(shí)點(diǎn)。代碼如下:

def get_suffix(filename, has_dot=False):
    """
    獲取文件名的后綴名

    :param filename: 文件名
    :param has_dot: 返回的后綴名是否需要帶點(diǎn)

    :return: 文件的后綴名
    """
    pos = filename.rfind('.')
    if 0 < pos < len(filename) - 1:
        index = pos if has_dot else pos + 1
        return filename[index:]
    else:
        return ''

到此這篇關(guān)于Python基礎(chǔ)面試20題 的文章就介紹到這了,更多相關(guān)Python基礎(chǔ)面試題 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

相關(guān)文章

  • 2019Python必刷面試題 (110道)

    這篇文章主要介紹了2019Python必刷面試題 (110道),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-07
  • 常見(jiàn)Python面試題目整理小結(jié)

    這篇文章主要介紹了常見(jiàn)Python面試題目整理小結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-07
  • 2019年最新的Python面試題(小結(jié))

    這篇文章主要介紹了2019年最新的Python面試題(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-30
  • Python高頻面試題及其答案(推薦)

    本文給大家分享Python高頻面試題及其答案,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2019-12-26
  • 2019Python必刷面試題(小結(jié))

    這篇文章主要介紹了2019Python必刷面試題(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-25
  • Python經(jīng)典面試題與參考答案集錦

    這篇文章主要介紹了Python經(jīng)典面試題與參考答案,總結(jié)分析了Python面試中各種常見(jiàn)的概念、數(shù)據(jù)結(jié)構(gòu)、算法等相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-04
  • 兩道阿里python面試題與參考答案解析

    這篇文章主要介紹了兩道阿里python面試題與參考答案,結(jié)合具體實(shí)例形式分析了Python數(shù)組創(chuàng)建、遍歷、拆分及隨機(jī)數(shù)等相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-02
  • 60道硬核Python面試題,論面霸是如何煉成的

    這篇文章主要介紹了60道硬核Python面試題,論面霸是如何煉成的,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-28
  • 關(guān)于Python爬蟲(chóng)面試170道題(推薦)

    這篇文章主要介紹了關(guān)于Python爬蟲(chóng)面試170道題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-15
  • 50個(gè)Python面試問(wèn)題集錦

    Python是目前編程領(lǐng)域最受歡迎的語(yǔ)言。在本文中,我將總結(jié)Python面試中最常見(jiàn)的50個(gè)問(wèn)題。每道題都提供參考答案,感興趣的可以了解下
    2019-06-26

最新評(píng)論