python面試題整理(30題)

--------------------------------------技術是日積月累堆積而成的,沒有一蹴而就.java


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

一、爲何學習Python?c++

     一、語言自己簡潔,優美,功能超級強大,
     二、跨平臺,從桌面應用,web開發,自動化測試運維,爬蟲,人工智能,大數據處理都能作
     三、很是火爆的社區
     四、不少有名的大公司堵在用web

二、經過什麼途徑學習的Python?express

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

三、Python和Java、PHP、C、C#、C++等其餘語言的對比?c#

     一、c,它是現代編輯語言的老一輩了,在現代應用中使用很少,全部大部分語言,寫法都和c語言差很少,經常被用做學習其餘語言的基礎閉包

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

       三、c++是面向對象的c語言,因爲偏底層,因此性能很是高,主要用在一個要求高性能的領域運維

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

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

      六、python程序是開源的,但c#卻不是,python能夠跨平臺 

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

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

解釋型語言

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

編譯器語言

    用編譯型語言寫的程序執行以前,須要一個專門的編譯過程,經過編譯系統,把源高級程序編譯成爲機器語言文件,翻譯只作了一次,運行時不須要翻譯,因此編譯型語言的程序執行效率高,但也不能一律而論。
    部分解釋型語言的解釋器經過在運行時動態優化代碼,甚至可以使解釋型語言的性能超過編譯型語言。

五、Python解釋器種類以及特色?

       CPython:這個解釋器是用C語言開發的,因此叫CPython,在命名行下運行python,就是啓動CPython解釋器,CPython是使用最廣的Python解釋器;

        Jython:Jython是運行在Java平臺上的Python解釋器,能夠直接把Python代碼編譯成Java字節碼執行;

        PyPy:PyPy是另外一個Python解釋器,對Python代碼進行動態編譯(注意不是解釋),因此能夠顯著提升Python代碼的執行速度;

        IPython:IPython是基於CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所加強。

六、位和字節的關係?

        1字節=8位、一個字符=2字節

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

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

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

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

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

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

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

        五、整體原則,避免沒必要要的空格

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

  九、經過代碼實現以下轉換:

           二進制轉換成十進制: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))

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

 

十一、python遞歸的最大層數?

            默認最大次數1000,這是python專門設置的一種機制用來防止無限遞歸形成Python溢出崩潰, 最大遞歸次數是能夠從新調整的

            import sys

            sys.setrecursionlimit(1500)

十二、求結果:

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會報錯
1三、ascii、unicode、utf-八、gbk 區別?

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

        Unicode可以表示全世界全部的字節

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

        GBK是隻用來編碼漢字的,GBK全稱《漢字內碼擴展規範》,使用雙字節編碼。

1四、字節碼和機器碼的區別?

        字節碼:字節碼是一種中間狀態(中間碼)的二進制代碼(文件)。須要直譯器轉譯後才能成爲機器碼。

        機器碼:機器碼就是計算機能夠直接執行,而且執行速度最快的代碼。

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

        三元運算符就是在賦值變量的時候,能夠直接加判斷,而後賦值

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

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

        res = 值1 if 條件 else 值2

1六、列舉 Python2和Python3的區別?

         一、print

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

        二、整數的除法

            在python2中,鍵入的任何不帶小數的數字,將被視爲整數的編程類型。好比5/2=2,解決方法:5.0/2.0=2.5

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

         三、Unicode

            Python 2 默認使用 ASCII 字母表;Python 3 默認使用 Unicode

          四、後續發展

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

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

1七、用一行代碼實現數值交換:   

            a = 1
            b = 2

                        a, b = b, a

1八、Python3和Python2中 int 和 long的區別?

        int(符號整數):一般被稱爲是整數或整數,沒有小數點的正或負整數;

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

1九、xrange和range的區別?

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

        xrange:函數說明,xrange 用法與 range 徹底相同,所不一樣的是生成的不是一個list對象,而是一個生成器。

                    一、range和xrange都是在循環中使用,輸出結果同樣。
                    二、range返回的是一個list對象,而xrange返回的是一個生成器對象(xrange object)。
                  三、xrange則不會直接生成一個list,而是每次調用返回其中的一個值,內存空間使用極少,於是性能很是好。

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

20、文件操做時:xreadlines和readlines的區別?

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

2一、列舉布爾值爲False的常見值?

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

2二、字符串、列表、元組、字典每一個經常使用的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() # 拷貝字典
2三、lambda表達式格式以及應用場景?    

            lambda表達式,一般是在須要一個函數,可是又不想費神去命名一個函數的場合下使用,也就是指匿名函數。

            add = lambda x, y : x+y

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

                    應用在函數式編程中 應用在閉包中

2四、pass的做用?

            一、空語句 do nothing
            二、保證格式完整,保證語義完整
            三、佔位語句

2五、*arg和**kwarg做用

           *args:能夠理解爲只有一列的表格,長度不固定。

            **kwargs:能夠理解爲字典,長度也不固定。

            一、函數調用裏的*arg和**kwarg:
              (1) *arg:元組或列表「出現」
                        **kwarg:字典「出沒」
              (2)分割參數
             二、函數定義時傳的*arg /**kwarg:
              (1)接收參數

2六、is和==的區別

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

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

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

        淺拷貝指僅僅拷貝數據集合的第一層數據,深拷貝指拷貝數據集合的全部層

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

2八、Python垃圾回收機制?

        Python的GC模塊主要運用了「引用計數」(reference counting)來跟蹤和回收垃圾。在引用計數的基礎上,還能夠通
過「標記-清除」(mark and sweep)解決容器對象可能產生的循環引用的問題。經過「分代回收」(generation collection)以空間換取時間來進一步提升垃圾回收的效率。

2九、Python的可變類型和不可變類型?

            Python的每一個對象都分爲可變和不可變
       可變:列表、字典   不可變:數字、字符串、元組

30、求結果:

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

相關文章
相關標籤/搜索