1. 程式人生 > >python面試題整理(1-30)

python面試題整理(1-30)

第一部分 Python基礎篇(80題)

1、為什麼學習Python?

     1、語言本身簡潔,優美,功能超級強大,
     2、跨平臺,從桌面應用,web開發,自動化測試運維,爬蟲,人工智慧,大資料處理都能做
     3、非常火爆的社群
     4、很多有名的大公司堵在用

2、通過什麼途徑學習的Python?

    通過參加培訓、網上搜索資料進行學習

3、Python和Java、PHP、C、C#、C++等其他語言的對比?

     1、c,它是現代編輯語言的老一輩了,在現代應用中使用不多,所有大部分語言,寫法都和c語言差不多,常常被用作學習其他語言的基礎

       2、PHP語言主要適用於網頁編輯,而python適合與各個領域

       3、c++是面向物件的c語言,由於偏底層,所以效能非常高,主要用在一個要求高效能的領域

        4、學習起來python要比java簡單快捷的多,java從c++的系統語言中繼承了許多語法和複雜型,而python的語法非常簡潔,大大提高編寫效率;

      5、python是解釋性語言,不需要額外的編譯過程,而c#必須編譯後才能執行

      6、python程式是開源的,但c#卻不是,python可以跨平臺 

       7、python比c++等這類語言,更容易學習,語法規則簡單,語意化,易讀易懂,容易維護  

4、簡述解釋型和編譯型程式語言?

解釋型語言

    解釋型語言編寫的程式不需要編譯,在執行的時候,專門有一個直譯器能夠將VB語言((Visual Basic)通用的基於物件的程式設計語言))翻譯成機器語言,每個語句都是執行的時候才翻譯。這樣解釋型語言每執行一次就要翻譯一次,效率比較低。

編譯器語言

    用編譯型語言寫的程式執行之前,需要一個專門的編譯過程,通過編譯系統,把源高階程式編譯成為機器語言檔案,翻譯只做了一次,執行時不需要翻譯,所以編譯型語言的程式執行效率高,但也不能一概而論。
    部分解釋型語言的直譯器通過在執行時動態優化程式碼,甚至能夠使解釋型語言的效能超過編譯型語言。

5、Python直譯器種類以及特點?

       CPython:這個直譯器是用C語言開發的,所以叫CPython,在命名行下執行python,就是啟動CPython直譯器,CPython是使用最廣的Python直譯器;

        Jython:Jython是執行在Java平臺上的Python直譯器,可以直接把Python程式碼編譯成Java位元組碼執行;

        PyPy:PyPy是另一個Python直譯器,對Python程式碼進行動態編譯(注意不是解釋),所以可以顯著提高Python程式碼的執行速度;

        IPython:IPython是基於CPython之上的一個互動式直譯器,也就是說,IPython只是在互動方式上有所增強。

6、位和位元組的關係?

        1位元組=8位、一個字元=2位元組

7、b、B、KB、MB、GB 的關係?

        1B=8b、1KB=1024B、1MB=1024KB、1G=1024MB

8、請至少列舉5個 PEP8 規範(越多越好)

        1、縮排。4個空格的縮排(編輯器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。

        2、每行最大長度79,換行可以使用反斜槓,最好使用圓括號。換行點要在操作符的後邊敲回車。

        3、不要在一句import中多個庫,比如import os, sys不推薦

        4、逗號、冒號、分號前不要加空格。

        5、總體原則,避免不必要的空格

        6、類的方法第一個引數必須是self,而靜態方法第一個引數必須是cls

  9、通過程式碼實現如下轉換:

           二進位制轉換成十進位制:v = “0b1111011”     答: print(int("0b1111011",2))

           十進位制轉換成二進位制:v = 18                    答:print("轉換為二進位制為:", bin(18))

           八進位制轉換成十進位制:v = “011”           答:print(int("011",8))

           十進位制轉換成八進位制:v = 30                    答:print("轉換為八進位制為:", oct(30))

            十六進位制轉換成十進位制:v = “0x12”      答:print(int("0x12",16))

            十進位制轉換成十六進位制:v = 87                答:print("轉換為十六進位制為:", hex(87))

10、請編寫一個函式實現將IP地址轉換成一個整數。

11、python遞迴的最大層數?

            預設最大次數1000,這是python專門設定的一種機制用來防止無限遞迴造成Python溢位崩潰, 最大遞迴次數是可以重新調整的

            import sys

            sys.setrecursionlimit(1500)

12、求結果:

v1 = 1 or 3
v2 = 1 and 3
v3 = 0 and 2 and 1
v4 = 0 and 2 or 1
v5 = 0 and 2 or 1 or 4
v6 = 0 or Flase and 1
答:
v1 = 1 
v2 = 3 
v3 = 0
v4 = 1
v5 = 1 
v6會報錯

13、ascii、unicode、utf-8、gbk 區別?

        ASCII碼使用一個位元組編碼,所以它的範圍基本是隻有英文字母、數字和一些特殊符號 ,只有256個字元。

        Unicode能夠表示全世界所有的位元組

        UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字元編碼,又稱萬國碼

        GBK是隻用來編碼漢字的,GBK全稱《漢字內碼擴充套件規範》,使用雙位元組編碼。

14、位元組碼和機器碼的區別?

        位元組碼:位元組碼是一種中間狀態(中間碼)的二進位制程式碼(檔案)。需要直譯器轉譯後才能成為機器碼。

        機器碼:機器碼就是計算機可以直接執行,並且執行速度最快的程式碼。

15、三元運算規則以及應用場景?

        三元運算子就是在賦值變數的時候,可以直接加判斷,然後賦值

        三元運算子的功能與'if....else'流程語句一致,它在一行中書寫,程式碼非常精煉,執行效率更高

        格式:[on_true] if [expression] else [on_false]

        res = 值1 if 條件 else 值2

16、列舉 Python2和Python3的區別?

         1、print

            在python2中,print被視為一個語句而不是一個函式,python3中,print()被視為一個函式

        2、整數的除法

            在python2中,鍵入的任何不帶小數的數字,將被視為整數的程式設計型別。比如5/2=2,解決方法:5.0/2.0=2.5

            在python3中,整數除法變得更直觀 5/2=2.5

         3、Unicode

            Python 2 預設使用 ASCII 字母表;Python 3 預設使用 Unicode

          4、後續發展

            Python 2.7 將在 2020 年失去後續的支援,

            Python 3 將繼續開發更多的功能和修復更多的錯誤。

17、用一行程式碼實現數值交換:   

            a = 1
            b = 2

                        a, b = b, a

18、Python3和Python2中 int 和 long的區別?

        int(符號整數):通常被稱為是整數或整數,沒有小數點的正或負整數;

        long(長整數):無限大小的整數,這樣寫整數和一個大寫或小寫的L。

19、xrange和range的區別?

        range: 函式說明,range([start,] stop[, step]),根據start與stop指定的範圍以及step設定的步長,生成一個列表。

        xrange:函式說明,xrange 用法與 range 完全相同,所不同的是生成的不是一個list物件,而是一個生成器。

                    1、range和xrange都是在迴圈中使用,輸出結果一樣。
                    2、range返回的是一個list物件,而xrange返回的是一個生成器物件(xrange object)。
                  3、xrange則不會直接生成一個list,而是每次呼叫返回其中的一個值,記憶體空間使用極少,因而效能非常好。

        注意:Python 3.x已經去掉xrange,全部用range代替。

20、檔案操作時:xreadlines和readlines的區別?

        二者使用時相同,但返回型別不同,xreadlines返回的是一個生成器,readlines返回的是list

21、列舉布林值為False的常見值?

            0 , [ ] , " , ( ) , { }

22、字串、列表、元組、字典每個常用的5個方法?

# 字串
words = "today is a wonderfulday"
print(words.strip('today'))      # 如果strip方法指定一個值的話,那麼會去掉這兩個值
print(words.count('a'))          # 統計字串出現的次數
print(words.index('is'))         # 找下標
print(words.index('z'))          # 找下標如果元素不找不到的話,會報錯
print(words.find('z'))           # 找下標,如果元素找不到的話,返回-1
print(words.replace('day','DAY'))# 字串替換
#
# # 列表
sample_list = ['a', 1, ('a', 'b')]  # 建立列表
sample_list = ['a', 'b', 0, 1, 3]   #  Python列表操作
value_start = sample_list[0]  # 得到列表中的某一個值
end_value = sample_list[-1]  # 得到列表中的某一個值
del sample_list[0]  # 刪除列表的第一個值
sample_list[0:0] = ['sample value']  # 在列表中插入一個值
# 元組
#元組也是一個list,他和list的區別是元組的元素無法修改
tuple1 = (2, 3, 4, 5, 6, 4, 7)
print(type(tuple1))
print(tuple1[:7])
print(tuple1[: 5: -1])
for i in range(6):
        print(tuple1[i])
for i in tuple1:
        print(i)


# 字典
D.get(key, 0)       # dict[key],多了個沒有則返回預設值,0[]沒有則拋異常
D.has_key(key)      # 有該鍵返回TRUE,否則FALSE
D.keys()            # 返回字典鍵的列表
D.clear()           # 清空字典,同del dict
D.copy()            # 拷貝字典

23、lambda表示式格式以及應用場景?    

            lambda表示式,通常是在需要一個函式,但是又不想費神去命名一個函式的場合下使用,也就是指匿名函式。

            add = lambda x, y : x+y

            print(add(1,2))  # 結果為3

                    應用在函數語言程式設計中 應用在閉包中

24、pass的作用?

            1、空語句 do nothing
            2、保證格式完整,保證語義完整
            3、佔位語句

25、*arg和**kwarg作用

           *args:可以理解為只有一列的表格,長度不固定。

            **kwargs:可以理解為字典,長度也不固定。

            1、函式呼叫裡的*arg和**kwarg:
              (1) *arg:元組或列表“出現”
                        **kwarg:字典“出沒”
              (2)分割引數
             2、函式定義時傳的*arg /**kwarg:
              (1)接收引數

26、is和==的區別

         is是對比地址(id),==是對比值

27、簡述Python的深淺拷貝以及應用場景?

        淺拷貝:copy.copy                       深拷貝:copy.deepcopy

        淺拷貝指僅僅拷貝資料集合的第一層資料,深拷貝指拷貝資料集合的所有層

                      主要應用在字串,數字的深淺拷貝

28、Python垃圾回收機制?

        Python的GC模組主要運用了“引用計數”(reference counting)來跟蹤和回收垃圾。在引用計數的基礎上,還可以通
過“標記-清除”(mark and sweep)解決容器物件可能產生的迴圈引用的問題。通過“分代回收”(generation collection)以空間換取時間來進一步提高垃圾回收的效率。

29、Python的可變型別和不可變型別?

            Python的每個物件都分為可變和不可變
       可變:列表、字典   不可變:數字、字串、元組

30、求結果:

v = dict.fromkeys(['k1','k2'],[])
v['k1'].append(666)
print(v)
v['k1'] = 777
print(v)
答:
{'k1': [666], 'k2': [666]}
{'k1': 777, 'k2': [666]}