1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        金三銀四,50 道必備的 Python 面試題(建議收藏)

        共 13234字,需瀏覽 27分鐘

         ·

        2021-03-19 12:14


        大家好,我是安果!


        在過(guò)去的 2020 年,Python 贏得了年度 TIOBE 編程語(yǔ)言獎(jiǎng),成為過(guò)去一年最受歡迎的編程語(yǔ)言;在數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)等領(lǐng)域中,被廣泛使用


        現(xiàn)在正是 “金三銀四” 招聘季,我給大家整理了 50 道 Python 面試題,還有相對(duì)應(yīng)的答案,來(lái)幫助大家更好的了解和學(xué)習(xí) Python



        ▍1、什么是 Python?為什么它會(huì)如此流行?


        Python 是一種解釋的、高級(jí)的、通用的編程語(yǔ)言


        Python 的設(shè)計(jì)理念是通過(guò)使用必要的空格與空行,增強(qiáng)代碼的可讀性


        它之所以受歡迎,就是因?yàn)樗哂泻?jiǎn)單易用的語(yǔ)法


        ▍2、為什么 Python 執(zhí)行速度慢,我們?nèi)绾胃倪M(jìn)它?


        Python 代碼執(zhí)行緩慢的原因,是因?yàn)樗且环N解釋型語(yǔ)言。它的代碼在運(yùn)行時(shí)進(jìn)行解釋,而不是編譯為本地語(yǔ)言


        為了提高 Python 代碼的速度,我們可以使用 CPython、Numba,或者我們也可以對(duì)代碼進(jìn)行一些修改


        1. 減少內(nèi)存占用

        2. 使用內(nèi)置函數(shù)和庫(kù)

        3. 將計(jì)算移到循環(huán)外

        4. 保持小的代碼庫(kù)

        5. 避免不必要的循環(huán)



        ▍3、Python有什么特點(diǎn)?


        1. 易于編碼

        2. 免費(fèi)和開(kāi)源語(yǔ)言

        3. 高級(jí)語(yǔ)言

        4. 易于調(diào)試

        5. OOPS支持

        6. 大量的標(biāo)準(zhǔn)庫(kù)和第三方模塊

        7. 可擴(kuò)展性(我們可以用C或C++編寫(xiě)Python代碼)

        8. 用戶友好的數(shù)據(jù)結(jié)構(gòu)



        ▍4、Python有哪些應(yīng)用?


        1. Web開(kāi)發(fā)

        2. 桌面GUI開(kāi)發(fā)

        3. 人工智能和機(jī)器學(xué)習(xí)

        4. 軟件開(kāi)發(fā)

        5. 業(yè)務(wù)應(yīng)用程序開(kāi)發(fā)

        6. 基于控制臺(tái)的應(yīng)用程序

        7. 軟件測(cè)試

        8. Web自動(dòng)化

        9. 基于音頻或視頻的應(yīng)用程序

        10. 圖像處理應(yīng)用程序



        ▍5、Python的局限性?

        1. 速度

        2. 移動(dòng)開(kāi)發(fā)

        3. 內(nèi)存消耗(與其他語(yǔ)言相比非常高)

        4. 兩個(gè)版本的不兼容(2,3)

        5. 運(yùn)行錯(cuò)誤(需要更多測(cè)試,并且錯(cuò)誤僅在運(yùn)行時(shí)顯示)

        6. 簡(jiǎn)單性



        ▍6、Python代碼是如何執(zhí)行的?


        首先,解釋器讀取Python代碼并檢查是否有語(yǔ)法或格式錯(cuò)誤。


        如果發(fā)現(xiàn)錯(cuò)誤,則暫停執(zhí)行。如果沒(méi)有發(fā)現(xiàn)錯(cuò)誤,則解釋器會(huì)將Python代碼轉(zhuǎn)換為等效形式或字節(jié)代碼。


        然后將字節(jié)碼發(fā)送到Python虛擬機(jī)(PVM),這里Python代碼將被執(zhí)行,如果發(fā)現(xiàn)任何錯(cuò)誤,則暫停執(zhí)行,否則結(jié)果將顯示在輸出窗口中。




        ▍7、如何在Python中管理內(nèi)存?


        Python內(nèi)存由Python的私有headspace管理。


        所有的Python對(duì)象和數(shù)據(jù)結(jié)構(gòu)都位于一個(gè)私有堆中。私用堆的分配由Python內(nèi)存管理器負(fù)責(zé)。


        Python還內(nèi)置了一個(gè)的垃圾收集器,可以回收未使用的內(nèi)存并釋放內(nèi)存,使其可用于headspace。



        ▍8、解釋Python的內(nèi)置數(shù)據(jù)結(jié)構(gòu)?

        Python中主要有四種類型的數(shù)據(jù)結(jié)構(gòu)。 


        列表:列表是從整數(shù)到字符串甚至另一個(gè)列表的異構(gòu)數(shù)據(jù)項(xiàng)的集合。列表是可變的。列表完成了其他語(yǔ)言中大多數(shù)集合數(shù)據(jù)結(jié)構(gòu)的工作。列表在[ ]方括號(hào)中定義。

        例如:a = [1,2,3,4]


        集合:集合是唯一元素的無(wú)序集合。集合運(yùn)算如聯(lián)合|,交集&和差異,可以應(yīng)用于集合。{}用于表示一個(gè)集合。

        例如:a = {1,2,3,4}


        元組:Python元組的工作方式與Python列表完全相同,只是它們是不可變的。()用于定義元組。

        例如:a =(1,2,3,4)


        字典:字典是鍵值對(duì)的集合。它類似于其他語(yǔ)言中的hash map。在字典里,鍵是唯一且不可變的對(duì)象。

        例如:a = {'number':[1,2,3,4]}



        ▍9、解釋//、%、* *運(yùn)算符?


        //(Floor Division)-這是一個(gè)除法運(yùn)算符,它返回除法的整數(shù)部分。

        例如:5 // 2 = 2


        %(模數(shù))-返回除法的余數(shù)。

        例如:5 % 2 = 1


        **(冪)-它對(duì)運(yùn)算符執(zhí)行指數(shù)計(jì)算。a ** b表示a的b次方。

        例如:5 ** 2 = 25、5 ** 3 = 125



        ▍10、Python中的單引號(hào)和雙引號(hào)有什么區(qū)別?


        在Python中使用單引號(hào)(' ')或雙引號(hào)(" ")是沒(méi)有區(qū)別的,都可以用來(lái)表示一個(gè)字符串。


        這兩種通用的表達(dá)方式,除了可以簡(jiǎn)化程序員的開(kāi)發(fā),避免出錯(cuò)之外,還有一種好處,就是可以減少轉(zhuǎn)義字符的使用,使程序看起來(lái)更簡(jiǎn)潔,更清晰。



        ▍11、Python中append,insert和extend的區(qū)別?


        append:在列表末尾添加新元素。

        insert:在列表的特定位置添加元素。

        extend:通過(guò)添加新列表來(lái)擴(kuò)展列表。


        numbers = [1,2,3,4,5]
        numbers.append(6)
        print(numbers)
        >[1,2,3,4,5,6]

        ## insert(position,value)
        numbers.insert(2,7)  
        print(numbers)
        >[1,2,7,3,4,5,6]

        numbers.extend([7,8,9])
        print(numbers)
        >[1,2,7,3,4,5,6,7,8,9]

        numbers.append([4,5])
        >[1,2,7,3,4,5,6,7,8,9,[4,5]]



        ▍12、break、continue、pass是什么?


        break:在滿足條件時(shí),它將導(dǎo)致程序退出循環(huán)。

        continue:將返回到循環(huán)的開(kāi)頭,它使程序在當(dāng)前循環(huán)迭代中的跳過(guò)所有剩余語(yǔ)句。

        pass:使程序傳遞所有剩余語(yǔ)句而不執(zhí)行。



        ▍13、區(qū)分Python中的remove,del和pop?


        remove:將刪除列表中的第一個(gè)匹配值,它以值作為參數(shù)。

        del:使用索引刪除元素,它不返回任何值。

        pop:將刪除列表中頂部的元素,并返回列表的頂部元素。


        numbers = [1,2,3,4,5]
        numbers.remove(5)
        > [1,2,3,4]

        del numbers[0]
        >[2,3,4]

        numbers.pop()
        >4



        ▍14、什么是switch語(yǔ)句。如何在Python中創(chuàng)建switch語(yǔ)句?


        switch語(yǔ)句是實(shí)現(xiàn)多分支選擇功能,根據(jù)列表值測(cè)試變量。

        switch語(yǔ)句中的每個(gè)值都被稱為一個(gè)case。

        在Python中,沒(méi)有內(nèi)置switch函數(shù),但是我們可以創(chuàng)建一個(gè)自定義的switch語(yǔ)句。

        switcher = {
           1"January",
           2"February",
           3"March",
           4"April",
           5"May",
           6"June",
           7"July",
           8"August",
           9"September",
           10"October",
           11"November",
           12"December"
        }
        month = int(input())
        print(switcher.get(month))

        3
        march



        ▍15、舉例說(shuō)明Python中的range函數(shù)?


        range:range函數(shù)返回從起點(diǎn)到終點(diǎn)的一系列序列。

        range(start, end, step),第三個(gè)參數(shù)是用于定義范圍內(nèi)的步數(shù)。


        # number
        for i in range(5):
            print(i)
        0,1,2,3,4

        # (start, end)
        for i in range(15):
            print(i)
        1,2,3,4

        # (start, end, step)
        for i in range(052):
            print(i)
        >0,2,4



        ▍16、==和is的區(qū)別是?


        ==比較兩個(gè)對(duì)象或值的相等性。

        is運(yùn)算符用于檢查兩個(gè)對(duì)象是否屬于同一內(nèi)存對(duì)象。


        lst1 = [1,2,3]
        lst2 = [1,2,3]

        lst1 == lst2
        >True

        lst1 is lst2
        >False



        ▍17、如何更改列表的數(shù)據(jù)類型?


        要將列表的數(shù)據(jù)類型進(jìn)行更改,可以使用tuple()或者set()。


        lst = [1,2,3,4,2]

        # 更改為集合
        set(lst)    ## {1,2,3,4}
        # 更改為元組
        tuple(lst)  ## (1,2,3,4,2)



        ▍18、Python中注釋代碼的方法有哪些?


        在Python中,我們可以通過(guò)下面兩種方式進(jìn)行注釋。


        1. 三引號(hào)''',用于多行注釋。

        2. 單井號(hào)#,用于單行注釋。



        ▍19、!=和is not運(yùn)算符的區(qū)別?


        !=如果兩個(gè)變量或?qū)ο蟮闹挡幌嗟龋瑒t返回true。

        is not是用來(lái)檢查兩個(gè)對(duì)象是否屬于同一內(nèi)存對(duì)象。


        lst1 = [1,2,3,4]
        lst2 = [1,2,3,4]

        lst1 != lst2
        >False

        lst1 is not lst2
        >True



        ▍20、Python是否有main函數(shù)?


        是的,它有的。只要我們運(yùn)行Python腳本,它就會(huì)自動(dòng)執(zhí)行。



        ▍21、什么是lambda函數(shù)?


        Lambda函數(shù)是不帶名稱的單行函數(shù),可以具有n個(gè)參數(shù),但只能有一個(gè)表達(dá)式。也稱為匿名函數(shù)。


        a = lambda x, y:x + y
        print(a(56))

        11



        ▍22、iterables和iterators之間的區(qū)別?


        iterable:可迭代是一個(gè)對(duì)象,可以對(duì)其進(jìn)行迭代。在可迭代的情況下,整個(gè)數(shù)據(jù)一次存儲(chǔ)在內(nèi)存中。


        iterators:迭代器是用來(lái)在對(duì)象上迭代的對(duì)象。它只在被調(diào)用時(shí)被初始化或存儲(chǔ)在內(nèi)存中。迭代器使用next從對(duì)象中取出元素。


        # List is an iterable
        lst = [1,2,3,4,5]
        for i in lst:
            print(i)

        # iterator
        lst1 = iter(lst)
        next(lst1)
        >1
        next(lst1)
        >2
        for i in lst1:
            print(i)
        >3,4,5 



        ▍23、Python中的Map Function是什么?


        map函數(shù)在對(duì)可迭代對(duì)象的每一項(xiàng)應(yīng)用特定函數(shù)后,會(huì)返回map對(duì)象。



        ▍24、解釋Python中的Filter?


        過(guò)濾器函數(shù),根據(jù)某些條件從可迭代對(duì)象中篩選值。


        # iterable
        lst = [1,2,3,4,5,6,7,8,9,10]

        def even(num):
            if num%2==0:
                return num

        # filter all even numbers
        list(filter(even,lst))
        ---------------------------------------------
        [246810



        ▍25、解釋Python中reduce函數(shù)的用法?


        reduce()函數(shù)接受一個(gè)函數(shù)和一個(gè)序列,并在計(jì)算后返回?cái)?shù)值。


        from functools import reduce

        a = lambda x,y:x+y
        print(reduce(a,[1,2,3,4]))

        10 



        ▍26、什么是pickling和unpickling?


        pickling是將Python對(duì)象(甚至是Python代碼),轉(zhuǎn)換為字符串的過(guò)程。

        unpickling是將字符串,轉(zhuǎn)換為原來(lái)對(duì)象的逆過(guò)程。



        ▍27、解釋*args和**kwargs?


        *args,是當(dāng)我們不確定要傳遞給函數(shù)參數(shù)的數(shù)量時(shí)使用的。


        def add(* num):
            sum = 0 
            for val in num:
                sum = val + sum 
            print(sum)


        add(4,5
        add(7,4,6
        add(10,34,23
        --------------------- 
        9 
        17 
        67


        **kwargs,是當(dāng)我們想將字典作為參數(shù)傳遞給函數(shù)時(shí)使用的。


        def intro(**data):
            print("\nData type of argument:",type(data))
            for key, value in data.items():
                print("{} is {}".format(key,value))


        intro(name="alex",Age=22, Phone=1234567890)
        intro(name="louis",Email="[email protected]",Country="Wakanda", Age=25)
        --------------------------------------------------------------
        Data type of argument: <class 'dict'>
        name is alex
        Age is 22
        Phone is 1234567890

        Data type of argument: <class 'dict'>
        name is louis
        Email is [email protected]
        Country is Wakanda
        Age is 25



        ▍28、解釋re模塊的split()、sub()、subn()方法?


        split():只要模式匹配,此方法就會(huì)拆分字符串。

        sub():此方法用于將字符串中的某些模式替換為其他字符串或序列。

        subn():和sub()很相似,不同之處在于它返回一個(gè)元組,將總替換計(jì)數(shù)和新字符串作為輸出。


        import re
        string = "There are two ball in the basket 101"


        re.split("\W+",string)
        ---------------------------------------
        ['There''are''two''ball''in''the''basket''101']

        re.sub("[^A-Za-z]"," ",string)
        ----------------------------------------
        'There are two ball in the basket'

        re.subn("[^A-Za-z]"," ",string)
        -----------------------------------------
        ('There are two ball in the basket'10)



        ▍29、Python中的生成器是什么


        生成器(generator)的定義與普通函數(shù)類似,生成器使用yield關(guān)鍵字生成值。


        如果一個(gè)函數(shù)包含yield關(guān)鍵字,那么該函數(shù)將自動(dòng)成為一個(gè)生成器。


        # A program to demonstrate the use of generator object with next() A generator function 
        def Fun(): 
           yield 1
           yield 2
           yield 3

        # x is a generator object 
        x = Fun()
        print(next(x))
        -----------------------------
        1
        print(next(x))
        -----------------------------
        2



        ▍30、如何使用索引來(lái)反轉(zhuǎn)Python中的字符串?


        string = 'hello'

        string[::-1]
        >'olleh'



        ▍31、類和對(duì)象有什么區(qū)別?


        類(Class)被視為對(duì)象的藍(lán)圖。類中的第一行字符串稱為doc字符串,包含該類的簡(jiǎn)短描述。


        在Python中,使用class關(guān)鍵字可以創(chuàng)建了一個(gè)類。一個(gè)類包含變量和成員組合,稱為類成員。


        對(duì)象(Object)是真實(shí)存在的實(shí)體。在Python中為類創(chuàng)建一個(gè)對(duì)象,我們可以使用obj = CLASS_NAME()

        例如:obj = num()


        使用類的對(duì)象,我們可以訪問(wèn)類的所有成員,并對(duì)其進(jìn)行操作。


        class Person:
            """ This is a Person Class"""
            # varable
            age = 10
            def greets(self):
                print('Hello')


        # object
        obj = Person()
        print(obj.greet)
        ----------------------------------------
        Hello



        ▍32、你對(duì)Python類中的self有什么了解?


        self表示類的實(shí)例。


        通過(guò)使用self關(guān)鍵字,我們可以在Python中訪問(wèn)類的屬性和方法。


        注意,在類的函數(shù)當(dāng)中,必須使用self,因?yàn)轭愔袥](méi)有用于聲明變量的顯式語(yǔ)法。



        ▍33、_init_在Python中有什么用?


        “__init__”是Python類中的保留方法。


        它被稱為構(gòu)造函數(shù),每當(dāng)執(zhí)行代碼時(shí)都會(huì)自動(dòng)調(diào)用它,它主要用于初始化類的所有變量。



        ▍34、解釋一下Python中的繼承?


        繼承(inheritance)允許一個(gè)類獲取另一個(gè)類的所有成員和屬性。承提供代碼可重用性,可以更輕松地創(chuàng)建和維護(hù)應(yīng)用程序。


        被繼承的類稱為超類,而繼承的類稱為派生類/子類。



        ▍35、Python中OOPS是什么?


        面向?qū)ο缶幊?,抽?Abstraction)、封裝(Encapsulation)、繼承(Inheritance)、多態(tài)(Polymorphism)



        ▍36、什么是抽象?


        抽象(Abstraction)是將一個(gè)對(duì)象的本質(zhì)或必要特征向外界展示,并隱藏所有其他無(wú)關(guān)信息的過(guò)程。



        ▍37、什么是封裝?


        封裝(Encapsulation)意味著將數(shù)據(jù)和成員函數(shù)包裝在一起成為一個(gè)單元。


        它還實(shí)現(xiàn)了數(shù)據(jù)隱藏的概念。



        ▍38、什么是多態(tài)?


        多態(tài)(Polymorphism)的意思是「許多形式」。


        子類可以定義自己的獨(dú)特行為,并且仍然共享其父類/基類的相同功能或行為。



        ▍39、什么是Python中的猴子補(bǔ)?。?/span>


        猴子補(bǔ)丁(monkey patching),是指在運(yùn)行時(shí)動(dòng)態(tài)修改類或模塊。


        from SomeOtherProduct.SomeModule import SomeClass

        def speak(self):
            return "Hello!"

        SomeClass.speak = speak



        ▍40、Python支持多重繼承嗎?


        Python可以支持多重繼承。多重繼承意味著,一個(gè)類可以從多個(gè)父類派生。



        ▍41、Python中使用的zip函數(shù)是什么?


        zip函數(shù)獲取可迭代對(duì)象,將它們聚合到一個(gè)元組中,然后返回結(jié)果。


        zip()函數(shù)的語(yǔ)法是zip(*iterables)


        numbers = [123]
        string = ['one''two''three'
        result = zip(numbers,string)

        print(set(result))
        -------------------------------------
        {(3'three'), (2'two'), (1'one')}



        ▍42、解釋Python中map()函數(shù)?


        map()函數(shù)將給定函數(shù)應(yīng)用于可迭代對(duì)象(列表、元組等),然后返回結(jié)果(map對(duì)象)。


        我們還可以在map()函數(shù)中,同時(shí)傳遞多個(gè)可迭代對(duì)象。 


        numbers = (1234)
        result = map(lambda x: x + x, numbers)

        print(list(result))



        ▍43、Python中的裝飾器是什么?


        裝飾器(Decorator)是Python中一個(gè)有趣的功能。


        它用于向現(xiàn)有代碼添加功能。這也稱為元編程,因?yàn)槌绦虻囊徊糠衷诰幾g時(shí)會(huì)嘗試修改程序的另一部分。


        def addition(func):
            def inner(a,b):
                print("numbers are",a,"and",b)
                return func(a,b)
            return inner

        @addition
        def add(a,b):
           print(a+b)

        add(5,6)
        ---------------------------------
        numbers are 5 and 6
        sum: 11



        ▍44、編寫(xiě)程序,查找文本文件中最長(zhǎng)的單詞


        def longest_word(filename):
            with open(filename, 'r'as infile:
                      words = infile.read().split()
            max_len = len(max(words, key=len))
            return [word for word in words if len(word) == max_len]

        print(longest_word('test.txt'))
        ----------------------------------------------------
        ['comprehensions']



        ▍45、編寫(xiě)程序,檢查序列是否為回文


        a = input("Enter The sequence")
        ispalindrome = a == a[::-1]

        ispalindrome
        >True



        ▍46、編寫(xiě)程序,打印斐波那契數(shù)列的前十項(xiàng)


        fibo = [0,1]
        [fibo.append(fibo[-2]+fibo[-1]) for i in range(8)]

        fibo
        > [0112358132134]



        ▍47、編寫(xiě)程序,計(jì)算文件中單詞的出現(xiàn)頻率


        from collections import Counter

        def word_count(fname):
                with open(fname) as f:
                        return Counter(f.read().split())

        print(word_count("test.txt"))



        ▍48、編寫(xiě)程序,輸出給定序列中的所有質(zhì)數(shù)


        lower = int(input("Enter the lower range:"))
        upper = int(input("Enter the upper range:"))
        list(filter(lambda x:all(x % y != 0 for y in range(2, x)), range(lower, upper)))

        -------------------------------------------------
        Enter the lower range:10
        Enter the upper range:50
        [1113171923293137414347]


        ▍49、編寫(xiě)程序,檢查數(shù)字是否為Armstrong



        將每個(gè)數(shù)字依次分離,并累加其立方(位數(shù))。


        最后,如果發(fā)現(xiàn)總和等于原始數(shù),則稱為阿姆斯特朗數(shù)(Armstrong)。


        num = int(input("Enter the number:\n"))
        order = len(str(num))

        sum = 0
        temp = num

        while temp > 0:
           digit = temp % 10
           sum += digit ** order
           temp //= 10

        if num == sum:
           print(num,"is an Armstrong number")
        else:
           print(num,"is not an Armstrong number")



        ▍50、用一行Python代碼,從給定列表中取出所有的偶數(shù)和奇數(shù)


        a = [1,2,3,4,5,6,7,8,9,10]
        odd, even = [el for el in a if el % 2==1], [el for el in a if el % 2==0]

        print(odd,even)
        > ([13579], [246810])






        ??分享、點(diǎn)贊、在看,給個(gè)三連擊唄!

        瀏覽 60
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            天天搞夜夜操 | 久久99精品久久久久久国产越南 | 狠狠五月 | 国产精品自拍啪啪啪 | 豆花视频入口www | 亚洲xxxx3d | 殴美精品 喷水 | 三级国产片| 欧美夜夜骑 | 欧美亚洲中文字幕 |