Python面試重點(基礎篇)

来源:https://www.cnblogs.com/linglichong/archive/2020/02/26/12369837.html
-Advertisement-
Play Games

第一部分 必答題 1,簡述列舉瞭解的編程語言及語言間的區別? Python 解釋型語言,代碼簡潔,易懂 C語言 編譯型語言,底層語言 c++ 編譯型語言,在C語言基礎上加了面向對象 Java 混合型語言,可拓展性高 Golang 編譯型語言,強類型,代碼規範,高併發 語言特點: 靈活簡潔,語言優美 ...


第一部分 必答題

1,簡述列舉瞭解的編程語言及語言間的區別?

Python        解釋型語言,代碼簡潔,易懂
C語言           編譯型語言,底層語言
c++            編譯型語言,在C語言基礎上加了面向對象
Java        混合型語言,可拓展性高
Golang        編譯型語言,強類型,代碼規範,高併發

語言特點: 靈活簡潔,語言優美 可讀性強,

語言類型:
     解釋型:逐行轉化,運行效率低,性能差,開發效率高。相容性好,跨平臺
     編譯型 :一次性編譯成二進位文件,執行效率高,相容性差,
     動態語言:不用聲明變數的數據類型(腳本類語言)
     靜態語言:需要聲明變數的數據類型

第三方庫:python定位是任其發展,開源庫很多,應用領域廣

2,列舉Python2和Python3的區別?

python2只更新支持到2020年
print:2不加括弧,3加括弧
input:2中用戶輸入解析為int類型,raw_input為字元串類型,3直接是字元串類型
range:2是列表,xrange是可迭代對象;3是可迭代對象
繼承關係:2是新式類+經典類;3是新式類
數字表示:2,int和long(長整形,超出2**63-1,數字末尾有一個L);3所有整型都是int

3,看代碼寫結果

v1 = 1 or 2

v2 = 3 and 3 or 9 and 0
# v1 = 1
# v2 = 7
# 邏輯運算符優先順序 () > not > and > or
# 邏輯短路
and 全真則真,一假則假
or  一真則真,全假則假

True or 表達式  => True  (單個運算符和多個運算符的情況,都可以直接判定結果)
False and 表達式 => False(單個運算符的時候可以)

# 布爾值為假的十種情況: bool() => False
    0,0.0,False,0j,'',[],(),set(),{},None
詳解

4,以下的值有什麼不同?

v1 = [1,2,3]
v2 = [(1),(2),(3)]
v3 = [(1,),(2,),(3,)]

"""
# 逗號才是區分是否是元組的標識符
v1 = [1,2,3] # 列表[int , int , int]
v2 = [(89),(2.12),("abc")] # [int , float , str]
v3 = [(1,),(2,),(3,)] # [tuple,tuple,tuple,tuple]
res = () # 表達空元組
"""

5,用一行代碼實現數值交換。

a = 1
b = 2


a,b = b,a
# 通用
tmp = a
a = b
b = tmp

6,Python中單引號、雙引號、三引號的區別?

單雙引號沒有區別,三引號可以支持跨行
在互相嵌套時需註意:裡外不能使用相同的引號

7,is和==的區別?

is 是判斷記憶體地址是否一致
== 是判斷兩個對象的值是否相等

8,python里如何實現tuple和list的轉化?

list(數據) tuple(數據)

9,如何實現字元串 st='愛吃大西瓜'的反轉?

st = st[::-1]

10,兩個set如何獲取交集、並集、差集?

交集 &
intersection
差集 -
difference
並集 |
union
對稱差集 ^
symmetric_difference

11,那些情況下, y != x - (x-y)會成立?

非空集合且不為子父關係的兩個集合

12,Python中如何拷貝一個對象?

# copy模塊
[:]
import copy
copy.copy()    # 淺拷貝
copy.deepcopy() # 深拷貝

13,簡述 賦值、淺拷貝、深拷貝的區別?

賦值:將變數和值在記憶體中形成映射指向關係
淺拷貝:只拷貝第一層元素地址copy.copy
深拷貝:為所有層級的元素都單獨開闢新空間 copy.deepcopy() (地址:原不可變數據只是暫時的指向,可變的數據獨立開闢新空間)

可變數據: list set dict
不可變數據: int float bool complex str tuple

14,pass的作用?

pass  占位符  與  ...的用法一樣

15,閱讀代碼寫結果:

import copy
a = [1,2,4,5,['b','c']]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(5)
a[4].append('d')
print(b)
# [1,2,4,5,['b','c','d'],5]
print(c)
# [1,2,4,5,['b','c','d']]
print(a)
# [1,2,4,5,['b','c','d'],5]

16,用Python實現9 * 9 乘法表。

# while
i = 1
while i<=9:
    # 這個位置寫代碼
    j = 1
    while j<= i:
        # "誰"*"誰"="誰"
        print("%d*%d=%2d" % (i,j,i*j),end=" ")
        j+=1
        
    # 列印換行
    print()    
    i+=1

# for
for i in range(1, 10):
    for x in range(1, i + 1):
        print(f"{i} * {x} = {i * x}",end=" ")
    print("")

17,用Python顯示一個斐波那契數列。

# 1 1 2 3 5 8 13 21 ...
# 方法一
lst = [1,1]
for i in range(10):
    lst.append(lst[-1] + lst[-2])
print(lst)

# 方法二
a,b = 0,1
for i in range(10):
    print(b)
    a,b = b,a+b

# 方法三
def fib(n):
    if n <= 2:
        return 1
    # 上一個值 + 上上個值
    return fib(n-1) + fib(n-2)

print(fib(6))

18,如何刪除列表中重覆的值?

list(set(list))

19,一個大小為100G的文件etl_log.txt, 要讀取文件中的內容, 寫出具體過程代碼?

with open(r'etl_log.txt','r',enconding='utf-8') as f:
    for i in f:
        info = f.readlines()
        print(info)

fp = open("文件名","模式","編碼集")
"""
fp 是迭代器
from collections import Iterator,Iterable

# 在遍歷fp時,文件按照一行一行進行讀取;
for i in fp:
    code ... 

"""

20,a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 請問a是什麼?

a為字典
強轉字典的條件:等長的二級容器,配合強轉字典的兩個函數 zip , enumerate
# zip  拉鏈
a = dict( zip( ("a","b") , [1,2] ) )
print(a)
# enumerate  枚舉
a = dict( enumerate( ["a","b"] ))
a = dict( enumerate( ["a","b"] ,start = 10 ))
print(a)
詳解

21,lambda關鍵字的作用?

lambda 匿名函數 : 用一句話表達只有返回值的無名函數
lambda 參數 : 返回值

22,*arg和**kwarg作用?

*args 接收多餘的位置參數
**kwargs 接收多餘的關鍵字參數

23,如何在函數中設置一個全局變數 ?

global  有該全局變數,修改當前變數,沒有改全局變數,定義一個全局變數;    
"""
def func():
    global a
    a = 90
func()
print(a)
"""

24,filter、map、reduce的作用?

三目(元)運算符  True   if 條件表達式 else False

filter => 過濾數據
iterable : 可迭代對象(range ,容器類型數據 , 迭代器)
filter(func,iterable)  => 返回迭代器

lst = [1,2,3,4,5]
it = filter(lambda x : True   if x % 2 == 0 else False , lst )
print(list(it))

25,什麼是匿名函數?匿名函數有什麼作用?

lambda 匿名函數 : 用一句話表達只有返回值的無名函數
lambda 參數 : 返回值

26,Python遞歸的最大層數?

官方:1000
實測:994 ~ 1000

import sys
sys.setrecursionlimit(999999) # 修改遞歸的最大深度,mac能達到30000

27,什麼是迭代器?什麼是可迭代對象?

迭代器:具有__iter__()和__next__()方法
可迭代對象:具有__iter__()方法


dir(數據) 可以查看該數據的內部系統成員
可迭代對象 => 迭代器  把不能直接被next獲取 => 可直接獲取到該數據的一個過程

28,什麼是生成器?

生成器的本質就是迭代器,可以自定義迭代的邏輯
創建方式兩種:
    (1)生成器表達式 (推導式)  (i for i in range(3))
    (2)生成器函數   (含有yield關鍵字)

29,什麼是裝飾器及應用場景?

裝飾器的本質就是閉包
在不修改原有代碼的前提下,額外增加新功能就是裝飾器

應用:登錄認證,property類,框架(django,flask,@app.route("/",methdos=["GET","POST"]))

30,什麼是反射及應用場景?

# 通過字元串去操作類對象 或者 模塊中的屬性方法

hasattr getattr setattr delattr

應用: 可以配合用戶的操作或者輸入,調用其中的成員,api介面中

31,寫一個普通的裝飾器。

def wrapper(func):
    def inner(*args,**kwargs):
        res = func(*args,**kwargs)
        print("and you")
        return res
        
    return inner

@wrapper
def func():
    print("i am fine 3q")

func()

32,寫一個帶參數的裝飾器。

def outer(n):
    def wrapper(func):
        def inner1(*args,**kwargs):
            res = func(*args,**kwargs)
            print("我是大王")
            return res
            
        def inner2(*args,**kwargs):
            res = func(*args,**kwargs)
            print("大王叫我來巡山")
            return res
        
        if n == "alex":
            return inner1
        else:
            return inner2
            
    return wrapper


@outer("alex123") # outer("alex123") => wrapper =>@wrapper
def func():
    print("i am fine 3q")
    
func()

33,求結果:

def num():
    return [lambda x:i*x for i in range(4)]
print([m(2) for m in num()])
[6,6,6,6]
"""
def出現的位置是函數的定義處
函數() 出現的位置是函數的調用處
(1)調用的時候,才會把函數中的代碼,從上到下執行一遍,否則不執行
(2)裡面的func是一個閉包函數,延長了當前變數i的生命周期,最後一次i的值3,所以再去調用時候拿的3
"""
詳解

34,def(a, b=[])這種寫法有什麼陷阱?

b身上的預設值是列表,如果使用原來預設的參數,調用func函數
會把幾次調用的值都存放在同一個預設列表裡
"""
預設參數: 
    如果調用時,用戶給實參了,那麼使用用戶的
    如果調用時,用戶沒給實參,那麼使用預設的(早已存在記憶體中的這個列表)
    
預設值會提前在記憶體中駐留,在使用時,才能調取,在定義函數的時候就提前開闢了空間
"""
詳解

35,看代碼寫結果

def func(a,b=[]):
    b.append(a)
    return b
v1 = func(1)
v2 = func(2,[10,20])
v3 = func(3)
print(v1,v2,v3)
[1,3],[10,20,2],[1,3]

36,看代碼寫結果

def func(a,b=[]):
    b.append(a)
    return b
v1 = func(1)
print(v1)
v2 = func(2,[10,20])
print(v2)
v3 = func(3)
print(v3)
[1]
[10,20,2]
[1,3]

37,請編寫一個函數實現將ip地址換成一個整數。

如 10.3.9.12 轉換規則為:
10 00001010
3 00000011
9 00001001
12 00001100
再將以上二進位拼接起來計算十進位結果:00001010 00000011 00001001 00001100 = ?
# ljust   原字元串居左,填充符號
# rjust   原字元串居右,填充符號
# 方法一
ip = "10.3.9.12"
strvar = ""
for i in ip.split("."):
    bin_str = str(bin(int(i)))[2:]
    # 總長度是8 原字元串居右
    strvar += bin_str.rjust(8,"0")
print(strvar)
    
# 把二進位字元串轉換成十進位,預設轉換時,是十進位
print(int(strvar,2))

# 方法二
ip = "10.3.9.12"
strvar = ""
for i in ip.split("."):
    # format 將整型轉化成二進位,不夠8位的拿0補位
    strvar += format(int(i) , "08b")
print(int(strvar,2))

38,請查找一個目錄下的所有文件(可能存在文件嵌套)。

39,求結果:

import math
print (math.floor(5.5))
5

40,是否使用過functools中的函數?其作用是什麼?

from functools import reduce
reduce   累計算

41,re的match和search區別?

match:    從開頭進行查找,查找到就停止,找不到返回None
search: 查找全文,找到就停止,找不到就返回None

42,用Python匹配HTML tag的時候,<.*><.*?>有什麼區別?

.* 貪婪匹配 匹配多個任意字元
.*? 非貪婪 只匹配一次

43,如何生成一個隨機數?

import random

random.random()    # 生成隨機小數

44,super的作用?

按照mro的順序進行繼承當前類的下一類

45,雙下劃線和單下劃線的區別?

雙線劃線:__ 是Python中強制定義為私有
單下劃線:_  是程式員約定的私有方法

46,@staticmethod和@classmethod的區別?

47,實現一個單例模式(加鎖)。

import threading

class Singleton():
    state = None
    lock = threading.RLock()
    
    def __init__(self,name):
        self.name = name
        
    def __new__(cls,*args,**kwargs):
        if cls.state: 
            return cls.state
        with cls.lock:
            if cls.state:
                return cls.state
            cls.state = object.__new__(cls)
        return cls.state

48,棧和隊列的區別?

棧:先進後出
隊列:先進先出

49,一下代碼輸出是什麼?請給出答案並解釋。

class Parent(object):
    x = 1
class Child1(Parent):
    pass
class Child2(Parent):
    pass
print Parent.x, Child1.x, Child2.x

Child1.x = 2
print Parent.x, Child1.x, Child2.x

Parent.x = 3
print Parent.x, Child1.x, Child2.x
"""
1,1,1
兩個child都繼承了parent,並沒有自己的屬性或方法


1,2,1
child1添加了屬性,就近原則使用自己x的值,child2沒有,繼承父類


3,2,3
parent和chile1有自己的x方法,就近使用自己的,chiild2沒有自己的x,繼承父類中的x
"""

50,參考下麵代碼片段:

class Context:
    pass
with Content() as ctx:
    ctx.do_something()
請在Context類下添加代碼完成該類的實現

第二部分 可選題

1,如何獲取列表中第二大的值?

2,簡述Python記憶體管理機制。

3,簡述Python的垃圾回收機制。

4,請用兩個隊列來實現一個棧。

5,請用Python實現一個鏈表。

6,請用Python實現鏈表的逆轉。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 什麼是正則? 正則表達式也稱為正則,是一個特殊的字元序列,能幫助檢查一個字元串是否與某種模式匹配。可以用來進行驗證:郵箱、手機號、qq號、密碼、url = 網站地址、ip等。正則不是python語言獨有的技術,python語言直到1.5版本才將正則表達式完成的整理/納入進re模塊中,我們只需要導入r ...
  • IDB package com.bjpowernode.proxy; /** * 代理類和目標類都必須使用同一個介面。 */ public interface IDB { int insert(); int delete(); int update(); } OracleDB package com ...
  • IDB package com.bjpowernode.proxy; /** * 代理類和目標類都必須使用同一個介面。 */ public interface IDB { int insert(); int delete(); int update(); } OracleDB package com ...
  • Reader.class package com.bjpowernode.decorator; public interface Reader { void close(); } FileReader package com.bjpowernode.decorator; /** * 裝飾者模式中的被 ...
  • 一、 SortedSet集合直接舉例 package com.bjpowernode.java_learning; import java.util.*; /** * java.util.Set * java.util.SortedSet;無序不可以重覆,但是存進去的元素可以按照元素大小順序自動進行 ...
  • 手冊上關於這塊的解釋感覺不是很詳細清晰,經過幾個示例自己總結了下這塊的用法。 方法表達式:說簡單點,其實就是方法對象賦值給變數。 這裡有兩種使用方式: 1)方法值:隱式調用, struct實例獲取方法對象 2) 方法表達式:顯示調用, struct類型獲取方法對象, 需要傳遞struct實例對象作為 ...
  • 鑒於python3目前已成流行之勢,而各發行版Linux依然是自帶python2.x,筆者嘗試在centos7下,部署Python3.x與2.x共存環境 本文參考博主良哥95網址https://blog.csdn.net/qq_39091354/article/details/86584046內容。 ...
  • python3-cookbook中每個小節以問題、解決方案和討論三個部分探討了Python3在某類問題中的最優解決方式,或者說是探討Python3本身的數據結構、函數、類等特性在某類問題上如何更好地使用。這本書對於加深Python3的理解和提升Python編程能力的都有顯著幫助,特別是對怎麼提高Py ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...