欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python基礎(chǔ)面試20題

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

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

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

這個問題,考了python特殊的語法,也就是a, b = b, a,這個表達式,也是其他語言所沒有的,是只有python自帶的。

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

我們都知道python中,拼接字符串可以用”+”來拼接,然而這個方法并不是高效的,因為如果需要拼接的字符串有很多(n個)的情況下,使用”+”的話,python解釋器會申請n-1次內(nèi)存空間,然后進行拷貝,因為字符串在python中是不可變的,所以當進行拼接的時候,會需要申請一個新的內(nèi)存空間。所以,正確答案是,使用.join(list),因為它只使用了一次內(nèi)存空間。

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

這個考點考了python的解壓賦值的知識點,即 a,b,c,*middle, e,f,g = list, *middle = [1,2,3,4,5]。注意,解壓賦值提取出來的是列表。

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

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

##5. 什么是元類?

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

##6.python的search和match知識點?

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

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

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

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

##9.類的初始化?

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

##10.多線程?

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

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

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

##12.python的filter方法?

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

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

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

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

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

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

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

##15. 裝飾器?

裝飾器是一個函數(shù),接收一個函數(shù)返回另一個函數(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個)最大值?最小值?

這道題的考點是python內(nèi)的heapq模塊的nlargest() 和 nsmallest(), 而不是min()和max()。這兩個函數(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個值(最小的3個值)
cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price'])
expensive = heapq.nlargest(3, portfolio, key=lambda s: s['price'])
# 上面代碼在對每個元素進行對比的時候,會以price的值進行比較。

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

這個題考的是python中對單例模式的理解和運用,有4個方法實現(xiàn)單例模式:

#方法1,實現(xiàn)__new__方法  
    #并在將一個類的實例綁定到類變量_instance上,  
    #如果cls._instance為None說明該類還沒有實例化過,實例化該類,并返回  
    #如果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檢測  
  print(id(one))  
  #29097904  
  print(id(two))  
  #29097904  
  print(one == two)
  #True  
  print(one is two)  
  #True  

  print('----------------------方法2--------------------------') 
  #方法2,共享屬性;所謂單例就是所有引用(實例、對象)擁有相同的狀態(tài)(屬性)和行為(方法)  
  #同一個類的所有實例天然擁有相同的行為(方法),  
  #只需要保證同一個類的所有實例具有相同的狀態(tài)(屬性)即可  
  #所有實例共享屬性的最簡單最直接的方法就是__dict__屬性指向(引用)同一個字典(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是兩個不同的對象,id, ==, is對比結(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具有相同的(同一個__dict__屬性),見:  
  print(id(one.__dict__)) 
  #30104000  
  print(id(two.__dict__))  
  #30104000  

  print '----------------------方法3--------------------------'  
  #方法3:本質(zhì)上是方法1的升級(或者說高級)版  
  #使用__metaclass__(元類)的高級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的升級(高級)版本,  
  #使用裝飾器(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 

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

這道題的考點關(guān)鍵是生成器的yield關(guān)鍵字將一個普通函數(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. 使用字符串拼接達到字幕滾動效果?

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è)計一個函數(shù)返回給定文件名的后綴?

這道題考了正則表達式的簡單知識點。代碼如下:

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

    :param filename: 文件名
    :param has_dot: 返回的后綴名是否需要帶點

    :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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

最新評論