天天看點

(面試題)python面試題集錦-附答案

1、一行代碼實作1-100的和

sum_1_100 = sum(range(1, 101))
print(sum_1_100)  # 5050      

2、如何在一個函數内修改全局變量的值

a = 100
def foo():
    global a
    a = 300

foo()
print(a)  # 300      

3、字典如何删除鍵和合并兩個字典

d1 = {"name": "wj", "age": 22}
d2 = {"male": "famle"}

# 删除鍵
del d1["name"]
print(d1)  # {'age': 22}

# 合并字典
d1.update(d2)
print(d1)  # {'age': 22, 'male': 'famle'}      

4、說一說對python的GIL的了解

  GIL是python的全局解釋器鎖,在一個程序中如果有多個線程執行,其中一個線程在執行的時候會霸占python解釋器(加鎖即GIL),那麼其他線程就不能執行,需要等待該線程解鎖才能執行,如果線程在遇到耗時操作(IO操作),則解釋器鎖會自動解開,其他線程繼續執行。是以,python的多線程并不是在同時運作的,而是有先後順序的。

  多程序相當于每個程序都有了一個python解釋器,是以多程序可以實作多個任務同時執行,缺點就是程序的資源開銷較大。

5、實作清單内元素去重

lst = [11, 12, 11, 13, 14, 13]

# 先轉為set,set内的元素不能重複
a = set(lst)
print(a)  # {11, 12, 13, 14}

# 再轉為list即可
lst = [x for x in a]
print(lst)  # [11, 12, 13, 14]      

6、python2和python3中range函數的差別

  在python2中range傳回的是一個清單,python3中range傳回的是疊代器,相對于清單疊代器更節約記憶體。

7、一句話解釋一下什麼樣的語言能夠用裝飾器

  函數可以作為參數傳遞的語言,可以使用裝飾器。

8、簡述面向對象中__new__和__init__方法的差別

  __init__方法是在執行個體化的時候初始化參數調用的,該方法有一個參數self,指代的執行個體對象本身,該方法不能有傳回值,用于初始化參數;

  __new__方法是在__init__方法之前就調用的,該方法有一個參數cls,指代的是目前類,它有傳回值,傳回執行個體化出來的執行個體。

class A:
    def __init__(self):
        print("這是init方法", self)

    def __new__(cls, *args, **kwargs):
        print("cls的ID:{}".format(id(cls)))
        print("這是new方法", object.__new__(cls))
        return object.__new__(cls)

A()
print("類A的id:{}".format(id(A)))

運作結果如下:      

cls的ID:635807211832

這是new方法 <__main__.A object at 0x00000094090CAEB8>

這是init方法 <__main__.A object at 0x00000094090CAEB8>

類A的id:635807211832

9、清單[1,2,3,4,5],使用map函數輸出[1,4,9,16,25],并使用清單推導式提取出大于10的數

a = [1, 2, 3, 4, 5]
b = map(lambda x:x**2, a)

c = [x for x in b if x>10]
print(c)  # [16, 25]      

10、python中生成随機整數、随機小數、0-1之間小數方法

  随機整數:random.randint(a, b),随機生成區間内的整數

  随機小數:使用numpy庫,np.random.randn(n),生成n個随機小數

  0-1随機小數:random.random(),括号中不傳參

import random
import numpy


print(random.randint(1, 10))  # 1-10随機整數
print(numpy.random.randn(5))  # 随機生成5個小數
print(random.random())  # 随機生成0-1的小數      

11、<div class="nam">中國</div>,用正則比對出标簽裡面的内容(“中國”),其中class的類名是不确定的

import re

str = '<div class="nam">中國</div>'
ret = re.findall(r'<div class=".*">(.*?)</div>', str)
print(ret)  # ['中國']      

12、python中斷言方法舉例

  assert方法,斷言成功則程式繼續執行,斷言失敗,則報錯

a = 3
assert (a>1)
print("斷言成功,程式繼續向下執行")

assert (a<1)  # # AssertionError
print("斷言失敗,程式報錯")