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("斷言失敗,程式報錯")