<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          金三銀四,50道必備的Python面試題

          共 13236字,需瀏覽 27分鐘

           ·

          2021-03-17 11:59

          作者 | 小F
          來源 | 法納斯特


          在過去的2020年,Python贏得了年度TIOBE編程語言獎,成為過去一年最受歡迎的編程語言。在數(shù)據(jù)科學和機器學習等領域中,被廣泛使用。


          正值“金三銀四”招聘季,小F給大家整理了50道Python面試題,還有相對應的答案,來幫助大家更好的了解和學習Python。



          ▍1、什么是Python?為什么它會如此流行?


          Python是一種解釋的、高級的、通用的編程語言。


          Python的設計理念是通過使用必要的空格與空行,增強代碼的可讀性。


          它之所以受歡迎,就是因為它具有簡單易用的語法。


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


          Python代碼執(zhí)行緩慢的原因,是因為它是一種解釋型語言。它的代碼在運行時進行解釋,而不是編譯為本地語言。


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


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

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

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

          4. 保持小的代碼庫。

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



          ▍3、Python有什么特點?


          1. 易于編碼

          2. 免費和開源語言

          3. 高級語言

          4. 易于調(diào)試

          5. OOPS支持

          6. 大量的標準庫和第三方模塊

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

          8. 用戶友好的數(shù)據(jù)結構



          ▍4、Python有哪些應用?


          1. Web開發(fā)

          2. 桌面GUI開發(fā)

          3. 人工智能和機器學習

          4. 軟件開發(fā)

          5. 業(yè)務應用程序開發(fā)

          6. 基于控制臺的應用程序

          7. 軟件測試

          8. Web自動化

          9. 基于音頻或視頻的應用程序

          10. 圖像處理應用程序



          ▍5、Python的局限性?

          1. 速度

          2. 移動開發(fā)

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

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

          5. 運行錯誤(需要更多測試,并且錯誤僅在運行時顯示)

          6. 簡單性



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


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


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


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




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


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


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


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



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

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


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

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


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

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


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

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


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

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



          ▍9、解釋//、%、* *運算符?


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

          例如:5 // 2 = 2


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

          例如:5 % 2 = 1


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

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



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


          在Python中使用單引號(' ')或雙引號(" ")是沒有區(qū)別的,都可以用來表示一個字符串。


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



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


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

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

          extend:通過添加新列表來擴展列表。


          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:在滿足條件時,它將導致程序退出循環(huán)。

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

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



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


          remove:將刪除列表中的第一個匹配值,它以值作為參數(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語句。如何在Python中創(chuàng)建switch語句?


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

          switch語句中的每個值都被稱為一個case。

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

          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、舉例說明Python中的range函數(shù)?


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

          range(start, end, step),第三個參數(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ū)別是?


          ==比較兩個對象或值的相等性

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


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

          lst1 == lst2
          >True

          lst1 is lst2
          >False



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


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


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

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



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


          在Python中,我們可以通過下面兩種方式進行注釋。


          1. 三引號''',用于多行注釋。

          2. 單井號#,用于單行注釋。



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


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

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


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

          lst1 != lst2
          >False

          lst1 is not lst2
          >True



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


          是的,它有的。只要我們運行Python腳本,它就會自動執(zhí)行。



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


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


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

          11



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


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


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


          # 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ù)在對可迭代對象的每一項應用特定函數(shù)后,會返回map對象。



          ▍24、解釋Python中的Filter


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


          # 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ù)接受一個函數(shù)和一個序列,并在計算后返回數(shù)值。


          from functools import reduce

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

          10 



          ▍26、什么是pickling和unpickling


          pickling是將Python對象(甚至是Python代碼),轉換為字符串的過程。

          unpickling是將字符串,轉換為原來對象的逆過程。



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


          *args,是當我們不確定要傳遞給函數(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,是當我們想將字典作為參數(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():只要模式匹配,此方法就會拆分字符串。

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

          subn():和sub()很相似,不同之處在于它返回一個元組,將總替換計數(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關鍵字生成值。


          如果一個函數(shù)包含yield關鍵字,那么該函數(shù)將自動成為一個生成器。


          # 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、如何使用索引來反轉Python中的字符串?


          string = 'hello'

          string[::-1]
          >'olleh'



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


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


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


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

          例如:obj = num()


          使用類的對象,我們可以訪問類的所有成員,并對其進行操作。


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


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



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


          self表示類的實例。


          通過使用self關鍵字,我們可以在Python中訪問類的屬性和方法。


          注意,在類的函數(shù)當中,必須使用self,因為類中沒有用于聲明變量的顯式語法。



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


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


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



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


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


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



          ▍35、Python中OOPS是什么?


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



          ▍36、什么是抽象?


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



          ▍37、什么是封裝?


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


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



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


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


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



          ▍39、什么是Python中的猴子補丁?


          猴子補丁(monkey patching),是指在運行時動態(tài)修改類或模塊。


          from SomeOtherProduct.SomeModule import SomeClass

          def speak(self):
              return "Hello!"

          SomeClass.speak = speak



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


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



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


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


          zip()函數(shù)的語法是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ù)應用于可迭代對象(列表、元組等),然后返回結果(map對象)。


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


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

          print(list(result))



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


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


          它用于向現(xiàn)有代碼添加功能。這也稱為元編程,因為程序的一部分在編譯時會嘗試修改程序的另一部分。


          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、編寫程序,查找文本文件中最長的單詞


          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、編寫程序,檢查序列是否為回文


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

          ispalindrome
          >True



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


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

          fibo
          > [0112358132134]



          ▍47、編寫程序,計算文件中單詞的出現(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、編寫程序,輸出給定序列中的所有質(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、編寫程序,檢查數(shù)字是否為Armstrong



          將每個數(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])



          獲取更多優(yōu)質(zhì)文章,點擊關注豬哥

          ??????

          瀏覽 45
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一级黄色强奸黑人视频 | 亚洲综合免费观看高清完整 | 91视频网站福利 | 精品乱伦无码 | 西西特级444www高清视频 |