当前位置: 首页 > 科技观察

2018年最常见的36道Python面试题,你能答对几道?附回答

时间:2023-03-12 03:14:33 科技观察

Q1:Python有什么特点和优势?Python作为入门级的编程语言,主要有以下特点和优势:可解释、动态、面向对象、简洁、开源、强大的社区支持当然,其实Python的优势远不止于此。Q2:深拷贝和浅拷贝有什么区别?答:深拷贝就是将一个对象复制到另一个对象中,也就是说你对一个对象的副本进行修改,不会影响到原来的对象。在Python中,我们使用函数deepcopy()进行深拷贝,导入模块拷贝,如下:>>>importcopy>>>b=copy.deepcopy(a)浅拷贝是拷贝一个的引用objecttoanotherononeobject,所以如果我们在副本中进行更改,就会影响到原来的对象。我们使用函数function()来执行浅拷贝,使用如下:>>>b=copy.copy(a)复制代码Q3.列表和元组有什么区别?答:两者的主要区别是列表是可变的,而元组是不可变的。例如如下:>>>mylist=[1,3,3]>>>mylist[1]=2>>>mytu??ple=(1,3,3)>>>mytu??ple[1]=2Traceback(mostrecentcallast):File"",line1,inmytu??ple[1]=2,会出现如下错误:TypeError:'tuple'objectdoesnotsupportitemassignment从Q4到Q20都是Python基础面试题对于新手。不过,有经验的人也可以看看这些题,复习一下基本概念。Q4.说明Python中的三元运算符不像C++。我们在Python中没有?:,但我们有:[ontrue]if[expression]else[onfalse]如果表达式为真,则执行[ontrue]语句。否则,执行[onfalse]中的语句。下面是使用方法:>>>a,b=2,3>>>min=aifa>>min运行结果:2>>>print("Hi")ifa>>importcopy>>>help(copy.copy)运行结果For:Helponfunctioncopyinmodulecopy:copy(x)ShallowcopyoperationonarbitraryPythonobjects.Seethemodule's__doc__stringformoreinfo.Dir()函数也是Python内置函数。当dir()函数没有参数时,返回当前范围内的变量、方法和定义类型的列表;当它有参数时,返回参数的属性和方法列表。下面的例子展示了如何使用dir:>>>dir(copy.copy)运行结果为:['__annotations__','__call__','__class__','__closure__','__code__','__defaults__','__delattr__','__dict__','__dir__','__doc__','__eq__','__format__','__ge__','__get__','__getattribute__','__globals__','__gt__','__hash__','__init__','__init_subclass__','__kwdefaults__','__le__','__lt__','__module__','__name__','__ne__','__new__','__qualname__','__reduce__','__reduce_ex__','__repr__','__setattr__','__sizeof__','__str__','__subclasshook__']Q10.退出Python时,内存是否全部释放?答案是不。当Python退出时,循环引用其他对象或全局命名空间中的对象的模块不会完全释放。此外,C库保留的内存部分不会被释放。Q11.什么是猴子补丁?在运行时动态修改类或模块。>>>classA:deffunc(self):print("Hi")>>>defmonkey(self):print"Hi,monkey">>>m.A.func=monkey>>>a=m.A()>>>a.func()的结果是:嗨,MonkeyQ12.Python中的字典是什么?字典是C++、Java等编程语言中不存在的东西。它有键值对。>>>roots={25:5,16:4,9:3,4:2,1:1}>>>type(roots)>>>roots[9]运行结果为:3个字典是不可变的,我们也可以使用推导来创建它。>>>roots={x**2:xforxinrange(5,0,-1)}>>>roots运行结果:{25:5,16:4,9:3,4:2,1:1}Q13.请解释使用*args和**kwargs的含义当我们不知道要传递给一个函数多少个参数时,比如我们将一个列表或元组传递给一个函数,我们就使用*args。>>>deffunc(*args):foriinargs:print(i)>>>func(3,2,1,4,7)运行结果为:32147当我们不知道要传递多少关键字参数时,使用**kwargs收集关键字参数。>>>deffunc(**kwargs):foriinkwargs:print(i,kwargs[i])>>>func(a=1,b=2,c=7)运行结果为:a.1b.2c.7Q14。请编写一个Python逻辑来计算文件中大写字母的数量>>>importos>>>os.chdir('C:\Users\lifei\Desktop')>>>withopen('Today.txt')astoday:count=0foriintoday.read():ifi.isupper():count+=1print(count)运行结果:26Q15、什么是负指数?我们首先创建这样一个列表:>>>mylist=[0,1,2,3,4,5,6,7,8]负索引不同于正索引,它们是从右边检索的。>>>mylist[-3]operationresult:6也可以用于list中的slice:>>>mylist[-6:-1]result:[3,4,5,6,7]Q16.如何就地随机播放列表的元素?为此,我们从随机模块导入shuffle()函数。>>>fromrandomimportshuffle>>>shuffle(mylist)>>>mylist运行结果:[3,4,8,0,5,7,6,2,1]Q17.解释join()和split(inPython)函数Join()允许我们将指定的字符添加到字符串中。>>>','.join('12345')结果:'1,2,3,4,5'Split()允许我们用指定字符拆分字符串。>>>'1,2,3,4,5'.split(',')运算结果:['1','2','3','4','5']Q18.Python区别是否区分大小写?如果它可以区分像myname和Myname这样的标识符,那么它是区分大小写的。也就是说,它关心大小写。我们可以用Python试试:>>>myname='Ayushi'>>>MynameTraceback(mostrecentcalllast):File"",line1,in运行结果:MynameNameError:name'Myname'isnotdefined可以看到,这里有一个NameError,所以Python是区分大小写的。Q19.标识符在Python中可以有多长?在Python中,标识符可以是任意长度。另外,我们在命名标识符时必须遵守以下规则:其余部分只能使用下划线或A-Z/a-z中的字母开头,可以使用A-Z/a-z/0-9不能使用区分大小写的关键字作为identifiers以下关键字:Q20.如何去除字符串中的前导空格?字符串中的前导空格是出现在字符串中第一个非空格字符之前的空格。我们可以使用方法Istrip()将其从字符串中删除。>>>'Ayushi'.lstrip()result:'Ayushi'可以看到字符串既有前导字符也有后缀字符,调用Istrip()去除前导空格。如果我们想删除尾随空格,请使用rstrip()方法。>>>'Ayushi'.rstrip()结果:'Ayushi'从Q21到Q35是针对有Python经验的人的Python面试问题的高级版本。Q21.如何将字符串转为小写?我们使用lower()方法。>>>'AyuShi'.lower()结果:'ayushi'可以使用upper()方法转换为大写。>>>'AyuShi'.upper()result:'AYUSHI'另外,使用isupper()和islower()方法检查字符spring是否全部为大写或小写。>>>'Ayushi'.isupper()False>>>'AYUSHI'.isupper()True>>>'ayushi'.islower()True>>>'@yu$hi'.islower()True>>>'@YU$HI'.isupper()True则@、$等字符同时满足大写和小写。Istitle()可以告诉我们一个字符串是否是标题格式。>>>'TheCorpseBride'.istitle()TrueQ22.Python中的pass语句是什么?在用Python写代码的时候,有时候你可能不知道函数怎么写,只写了函数声明,但是为了保证语法正确,Something是必须要输入的,在这种情况下我们使用pass语句.>>>deffunc(*args):pass>>>同样,break语句允许我们跳出循环。>>>foriinrange(7):ifi==3:breakprint(i)result:012***,continue语句让我们跳转到下一个循环。>>>foriinrange(7):ifi==3:continueprint(i)result:012456Q23.Python中的闭包是什么?当嵌套函数引用其外部区域中的值时,嵌套函数是闭包。意思就是这个值会被记录下来。>>>defA(x):defB():print(x)returnB>>>A(7)()result:7Q24.解释//Python中的%和**运算符//运算符执行楼层除法(floor除法),返回整除结果的整数部分。>>>7//23在这里整除后会返回3.5。同样,执行取幂。ab返回a的b次方。>>>2**101024***,%执行取模运算,返回除法余数。>>>13%76>>>3.5%1.50.5Q25、Python有多少种运算符?解释算术运算符。在Python中,我们有7种类型的运算符:算术运算符、关系运算符、赋值运算符、逻辑运算符、位运算符、成员运算符和身份运算符。我们有7个算术运算符可以让我们对值进行算术运算:1.加号(+),将两个值相加>>>7+8152。减号(-),加上最后一个值减去第二个值>>>7-8-13。乘号(*),两个值相乘>>>7*8564。除号(/),将第二个值除以***A值>>>7/80.875>>>1/11.05。对于向下舍入、取模和求幂,请参阅上一个问题。Q26.解释Python中的关系运算符关系运算符用于比较两个值。1、小于号(<),如果左边的值较小,则返回True。>>>'嗨'<'嗨'假2。大于号(>),如果左边的值更大,则返回True。>>>1.1+2.2>3.3真3。小于等于号(<=),如果左边的值小于等于右边的值,则返回True。>>>3.0<=3真4。大于等于号(>=),如果左边的值大于等于右边的值,则返回True。>>>True>=FalseTrue等号(==),如果符号两边的值相等则返回True。>>>{1,3,2,2}=={1,2,3}True不等于符号(!=),如果符号两边的值不相等则返回True。>>>True!=0.1True>>>False!=0.1TrueQ27.解释Python中的赋值运算符这是Python面试中的一道重要面试题。我们将所有算术运算符和赋值符号一起显示:>>>a=7>>>a+=1>>>a8>>>a-=1>>>a7>>>a*=2>>>a14>>>a/=2>>>a7.0>>>a**=2>>>a49>>>a//=3>>>a16.0>>>a%=4>>>a0.0Q28.解释Python中的逻辑运算符Python中有3种逻辑运算符:and、or、not。>>>FalseandTrueFalse>>>7<7orTrueTrue>>>not2==2FalseQ29.Python中的成员运算符详解通过成员运算符'in'和'notin',我们可以确认一个值是否是另一个值的成员.>>>'me'in'disappointment'True>>>'us'notin'disappointment'TrueQ30.解释Python中的恒等运算符这也是Python面试中经常被问到的问题。有了恒等运算符‘is’和‘isnot’,我们就可以确认两个值是否相同。>>>10is'10'False>>>TrueisnotFalseTrueQ31.谈谈Python中的位运算符。该运算符按二进制位对值进行运算。与(&),按位与运算符:两个值参与运算,如果对应的两个位都是1,则该位的结果为1,否则0>>>0b110&0b01022。或(|),按位或运算符:只要对应的两个二进制位之一为1,则结果位为1。>>>3|233。异或(^),按位异或运算符:当对应的两个二进制位不同时,结果为1>>>3^214。取反(~),按位取反运算符:将数据的每个二进制位取反,即1变为0,0变为1>>>~2-35。左移(<<),将操作数的所有二进制位左移一定的位,移动的位数由<<右边的数字指定,高位舍弃,和低位填充0>>>1<<246。右移(>>),将“>>”左边的操作数的所有二进制位向右移动一位数,>>右边的数指定要移动的位数>>>4>>21Q32.如何在Python中使用多基数?除了十进制,我们还可以使用二进制、八进制和十六进制。二进制数字由0和1组成,我们使用0b或0B前缀来表示二进制数。>>>int(0b1010)102.使用bin()函数将数字转换为二进制形式。>>>bin(0xf)'0b1111'3。八进制数由数字0-7组成,前缀0o或0O用来表示八进制数。>>>oct(8)'0o10'4。十六进制数由数字0-15组成,前缀0x或0X用于表示十六进制数。>>>hex(16)'0x10'>>>hex(15)'0xf'Q33.如何获取字典中所有键的列表?使用keys()获取字典中所有的key>>>mydict={'a':1,'b':2,'c':3,'e':5}>>>mydict.keys()dict_keys(['a','b','c','e'])Q34.为什么不建议标识符以下划线开头?因为Python没有私有变量的概念,所以约定俗成下划线开头的变量声明为私有。因此,如果您不想将变量设为私有,则不要使用前导下划线。Q35.如何声明多个变量并赋值?有两种方式:>>>a,b,c=3,4,5#Thisassigns3,4,and5toa,b,andcrespectively>>>a=b=c=3#Thisassigns3toa,b,andcQ36.什么是元组的拆包?首先我们看一下拆包:>>>mytu??ple=3,4,5>>>mytu??ple(3,4,5)这会将3,4,5打包到元组mytuple中。现在我们将这些值解包到变量x,y,z中:>>>x,y,z=mytuple>>>x+y+z得到结果12。