日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python必刷面试_Python面试必刷题系列(5)

發(fā)布時(shí)間:2024/10/8 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python必刷面试_Python面试必刷题系列(5) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本篇是【Python面試必刷題系列】的第5篇文章。通過收集、整理Python真實(shí)面試題,給大家講解面試中的python高頻考察點(diǎn),希望能夠引起讀者的足夠重視。

往期回顧:

Python中 is 和 == 有什么區(qū)別?

(1)==是比較運(yùn)算符,用來比較兩個(gè)對(duì)象的value(值)是否相等。

(2)is也叫做同一性運(yùn)算符,用來比較對(duì)象間的唯一身份標(biāo)識(shí)(id)是否一致。

請(qǐng)看示例:

a?=?b?=?"abc"X?=?"abc"print?a?==?b??#?Trueprint?a?==?X??#?Trueprint?a?is?b??#?Trueprint?a?is?X??#?Truea?=?b?=?[1,?2,?3]X?=?[1,?2,?3]print?a?==?b??#?Trueprint?a?==?X??#?Trueprint?a?is?b??#?Trueprint?a?is?X??#?False

結(jié)論:只有數(shù)值型和字符串型比較,a is X才為True,當(dāng)是tuple,list,dict或set型時(shí),a is X為False。

原因:id(a) != id(X),感興趣的同學(xué)可以試一下。

列舉sort 和 sorted 的區(qū)別

sort 只是應(yīng)用在 list 上的方法,就地排序,無返回值。

sorted 是內(nèi)建函數(shù),對(duì)所有可迭代的對(duì)象都可進(jìn)行排序,返回新的list。

sorted 語(yǔ)法:

sorted(iterable, key=None, reverse=False)

參數(shù)說明:

iterable -- 可迭代對(duì)象。

key -- 主要是用來進(jìn)行比較的元素,只有一個(gè)參數(shù),具體的函數(shù)的參數(shù)就是取自于可迭代對(duì)象中,指定可迭代對(duì)象中的一個(gè)元素來進(jìn)行排序。

reverse -- 排序規(guī)則,reverse = True 降序 , reverse = False 升序(默認(rèn))。

什么是猴子補(bǔ)丁?

在運(yùn)行期間動(dòng)態(tài)修改一個(gè)類或模塊,叫做猴子補(bǔ)丁(Monkey Patch)。

用法一:運(yùn)行時(shí)動(dòng)態(tài)替換模塊的方法

class?Person(object):????def?speak(self):????????print?"oooooo"def?speak_patch(self):????print?"eeeeee"if?__name__?==?'__main__':????Person.speak?=?speak_patch????person?=?Person()????person.speak()?#?輸出是?“eeeee”,相當(dāng)于臨時(shí)替換了模塊里的方法

用法二:運(yùn)行時(shí)動(dòng)態(tài)增加模塊的方法

這種場(chǎng)景也比較多,比如我們引用團(tuán)隊(duì)通用庫(kù)里的一個(gè)模塊,又想豐富模塊的功能,除了繼承之外也可以考慮用Monkey Patch。

成員變量用單、雙下劃線修飾的區(qū)別?

(1)

_xxx?: 保護(hù)型成員變量,只允許該類及其子類訪問;不能用于from module import *?。

(2)

__xxx?: 私有型成員變量,只允許該類本身進(jìn)行訪問,連子類也不允許。

(3)

__xxx__?: python內(nèi)置的專用特殊方法。像__init__()之類

的。

說說lambda表達(dá)式的應(yīng)用場(chǎng)景?

lambda 表達(dá)式的本質(zhì)就是匿名的、函數(shù)體僅有一行的函數(shù)。

#?lambda表達(dá)式lambda?x?,?y?:?x?+?y#?改寫成函數(shù)def?add(x,?y):????return?x+?y

雖然函數(shù)比 lambda 表達(dá)式的適應(yīng)性更強(qiáng),能夠創(chuàng)建復(fù)雜的函數(shù)對(duì)象,但 lambda 表達(dá)式依然有如下兩個(gè)優(yōu)點(diǎn):

對(duì)于單行函數(shù),使用 lambda 表達(dá)式可以省去定義函數(shù)的過程,讓代碼更加簡(jiǎn)潔。

對(duì)于不需要多次復(fù)用的函數(shù),使用 lambda 表達(dá)式可以在用完之后立即釋放,提高了性能。

例子如下:

a?=?[('a',?1),?('b',?2),?('c',?3),?('d',?4)]a_1?=?list(map(lambda?x:?x[0],?a))

copy 和 deepcopy 的區(qū)別是什么?

結(jié)論:

淺拷貝,只拷貝父對(duì)象,不會(huì)拷貝父對(duì)象內(nèi)部的子對(duì)象。

深拷貝,既拷貝父對(duì)象,又拷貝各級(jí)子對(duì)象。

理解:

import?copyorigin?=?[1,?2,?[3,?4]]??# origin 里邊有三個(gè)元素:1, 2,[3, 4]cop1?=?copy.copy(origin)cop2?=?copy.deepcopy(origin)print?cop1?==?cop2??#?Trueprint?cop1?is?cop2??#?False#?說明: cop1?和?cop2?目前看上去還相同,但已不再是同一個(gè)objectorigin[2][0]?=?"hey!"origin[0]?=?"a"print?origin??#?['a',?2,?['hey!',?4]]print?cop1??#?[1,?2,?['hey!',?4]]print?cop2??#?[1,?2,?[3,?4]]#?說明: origin第一層元素改變,對(duì)深淺拷貝都不會(huì)有影響;#?但是子對(duì)象(origin[2]?=?[3,?4])發(fā)生改變后,淺拷貝會(huì)跟著變,深拷貝卻不受影響

也就是說,如果父元素的第一層中存在可變對(duì)象,如list、dict以及普通類的實(shí)例對(duì)象等,使用淺拷貝只是傳遞了可變對(duì)象的引用,而深拷貝才是通俗理解上的完全復(fù)制。

下面是在普通類實(shí)例上做的一組測(cè)試,感興趣的同學(xué)可以繼續(xù)看,結(jié)論與上面一致。

import?copyclass?OBJ(object):????X?=?[1,?2,?[1,?2]]??#?類變量????def?__init__(self):????????self.x?=?[1,?2,?[1,?2]]??#?實(shí)例變量#?深淺拷貝origin?=?OBJ()cop1?=?copy.copy(origin)cop2?=?copy.deepcopy(origin)#?改變實(shí)例對(duì)象的屬性origin.x[0]?=?"**"origin.x[2][1]?=?"##"print?cop1.x??#?['**',?2,?[1,?'##']]print?cop2.x??#?[1,?2,?[1,?2]]#?改變類變量的屬性origin.X[0]?=?"**"origin.X[2][1]?=?"##"print?cop1.X??#?['**',?2,?[1,?'##']]print?cop2.X??#?['**',?2,?[1,?'##']]

什么是斷言?應(yīng)用場(chǎng)景?

python的assert是用來檢查一個(gè)條件,如果它為真,繼續(xù)往下執(zhí)行。如果它為假,則會(huì)拋出AssertError 錯(cuò)誤信息,并終止執(zhí)行程序。

例如:

x?=?23assert?x?>?0,?"x?is?not?positive"assert?x%2?==?0,?"x?is?not?an?even?number"

結(jié)果顯示:

Traceback?(most?recent?call?last):??File?"/Users/arrnos/PycharmProjects/wechat/interface.py",?line?3,?in?????assert?x%2?==?0,?"x?is?not?an?even?number"AssertionError:?x?is?not?an?even?number

斷言是保證程序運(yùn)行可靠性的一種方式,因?yàn)?#xff0c;在條件不符合我們預(yù)期時(shí),程序會(huì)自動(dòng)在斷言處終止運(yùn)行,同時(shí)會(huì)拋出錯(cuò)誤所在的代碼行和相關(guān)信息,也算是一種程序問題定位的手段。

具體應(yīng)用場(chǎng)景:函數(shù)入?yún)z查、運(yùn)行時(shí)程序邏輯檢查、約定檢查、程序常量以及文檔檢查等。

詳細(xì)可參考:https://www.cnblogs.com/zhuifeng-mayi/p/9248558.html

dir()是做什么的?

dir()是python的一種內(nèi)置函數(shù),dir(object)用于查看object內(nèi)部的全部屬性和方法。

比如查看list、字符串或者是os模塊的全部?jī)?nèi)部函數(shù)和方法,可以這樣:

print?dir(os)print?dir(list)print?dir("")print?dir(str)?#?和上面運(yùn)行結(jié)果一致

*args和 * *kwargs 的含義及用法。

在函數(shù)定義中使用?*args?和**kwargs傳遞可變長(zhǎng)參數(shù)。?*args用來將參數(shù)打包成 tuple 給函數(shù)體調(diào)用。** kwargs用于將關(guān)鍵字參數(shù)打包成 dict 給函數(shù)體調(diào)用。

(1) *和**的用法:拆包

def?fun1(a,?b):????print?a,?bdef?fun2(b,?a):????print?a,?bfun1(*[1,?2])?#?*用于拆解list或元組,拆解結(jié)果作為位置參數(shù)fun2(**{"a":?1,?"b":?3})?#?**用于拆解字典,并將其作為關(guān)鍵字參數(shù)

結(jié)果:

1?21?3

(2) *args 用法實(shí)例:

*args用于接收元組作為位置參數(shù)。

def?fun(a,?*args):????print?a????print?"args:",?args????print?"type(args):",?type(args)????for?arg?in?args:????????print?arg#?調(diào)用fun(1,?2,?3)

結(jié)果:

1args:?(2,?3)type(args):?23

(3)**kwargs用于接收字典類型的參數(shù)

def?fun(a,?**kwargs):????print?"a?is?",?a????print?"kwargs:",?kwargs????print?"type(kwargs):",?type(kwargs)????print?"b?is?",?kwargs.get("b",?None)????print?"c?is?",?kwargs.get("c",?None)????print?"d?is?",?kwargs.get("d",?None)#?調(diào)用fun(1,?b=3,?c=5)

結(jié)果:

a?is??1kwargs:?{'c':?5,?'b':?3}type(kwargs):?b?is??3c?is??5d?is??None

type、class和object之間的關(guān)系?

(1) type?: 用來返回一個(gè)對(duì)象的類型

(2) object

由于Python中一切皆對(duì)象,也就是說Python中的任何變量類型都是可以被修改的,這也是Python等動(dòng)態(tài)編程語(yǔ)言的特點(diǎn)。type的基類是object,但是object也是由type生成的,他們之間形成了一個(gè)環(huán)路,這樣設(shè)計(jì)的目的也就是為了方便對(duì)這些數(shù)據(jù)結(jié)構(gòu)進(jìn)行修改。

(3) class

class是用來描述一個(gè)類對(duì)象的,通過class可以實(shí)例化出一個(gè)對(duì)象。

(4) type,class,object三者之間的關(guān)系:

比心

?

推薦閱讀:

【算法研習(xí)社】

機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘、推薦系統(tǒng)、架構(gòu)編程

海量干貨,持續(xù)發(fā)送

大廠內(nèi)推、技術(shù)資料獲取,加小編微信,拉你進(jìn)

【算法研習(xí)社 - 交流群】

總結(jié)

以上是生活随笔為你收集整理的python必刷面试_Python面试必刷题系列(5)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。