六个Python经典面试题分享
1. 目录(list)和元组(tuple)有什么不同?
在我每一次面试Python大数据工程师的应聘中,这个问题都是会被问起。因此对这个问题的回答,我能说成了然于胸。目录是可调的。建立后能够对其进行改动。元组是*须变的。元组一旦建立,就不可以对其开展变更。
目录表明的是次序。他们是井然有序编码序列,一般是同一种类的目标。例如按建立日期排列的全部登录名,如["Seth", "Ema", "Eli"]。
元组表明的是构造。能够用于储存不一样基本数据类型的原素。例如运行内存中的数据库查询纪录,如(2, "Ema", "2020–04–16")(#id, 名字,建立日期)。
2. 怎样开展字符串数组插值法?
在没有导进Template类的情形下,有3种形式开展字符串数组插值法。
name = 'Chris'
# 1. f stringsprint(f'Hello {name}')
# 2. % operatorprint('Hey %s %s' % (name, ame))
# 3. format
print(
"My name is {}".format((name)))
3. “is”和“==”有什么不同?
在我的Python职业发展的初期,我觉得他们是同样的,因此生产制造了一些bug。因此请大伙儿听好啦,“is”用于查验目标的标志(id),而“==”用于查验2个目标是不是相同。大家将进行一个事例表明。建立一些目录并将其分派给不一样的名称。一定要注意,下边的b偏向与a同样的目标。
a = [1,2,3]
b = a
c = [1,2,3]
下边来查验是不是相同,你能注意到数据显示他们全是相同的。
print(a == b)
print(a == c)
#=> True
#=> True
可是两者都具有同样的标志(id)吗?回答不是。
print(a is b)
print(a is c)
#=> True
#=> False
我们可以根据打印出她们的目标标志(id)来认证这一点。
print(id(a))
print(id(b))
print(id(c))
#=> 4369567560
#=> 4369567560
#=> 4369567624
你能见到:c和a和b具备各种各样的标志(id)。
4. 什么叫装饰器(decorator)?
这也是每一次应聘我一定会被问起的另一个难题。它实际上就非常值得写一篇文章。假如你能自身用它撰写一个事例,那麼表明你早已办好了提前准备。
装饰器容许根据将目前涵数传送给装饰器,进而向目前涵数加上一些附加的作用,该装饰器将实行目前涵数的措施和加入的附加作用。
大家将撰写一个装饰器,该装饰器会在启用另一个涵数时纪录日志。
撰写装饰器涵数logging。它接纳一个涵数func做为主要参数。它还界定了一个名叫log_function_called的涵数,它先实行打印出出一些“涵数func被启用”的信息内容(print(f'{func} called.')),随后函数调用func()。最终回到界定的涵数。
def logging(func):
def log_function_called():
print(f'{func} called.')
func()
return log_function_called
使我们撰写别的2个涵数,大家以后会将装饰器加上到在其中(但都还没)。
def my_name():
print('chris')def friends_name():
print('naruto')my_name()
friends_name()
#=> chris
#=> naruto
如今将装饰器加上到上边撰写的2个涵数当中。
@logging
def my_name():
print('chris')@logging
def friends_name():
print('naruto')my_name()
friends_name()
#=>
#=> chris
#=>
#=> naruto
如今,你了解了怎样只是根据在其上边加上@logging(装饰器),就会更好地将日志加上到大家撰写的一切涵数中。
5. 表述Range函数
Range函数能够用于建立一个整数金额目录,一般用在for循环中。它有3种操作方法。
Range函数能够接纳1到3个主要参数,主要参数务必是整数金额。
一定要注意:我已经将range的每一种使用方法包裝在一个递推式结构目录(list comprehension)中,便于我们可以见到转化成的值。
使用方法1 - range(stop):转化成从0到主要参数“stop”中间的整数金额。
[i for i in range(10)]
#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
使用方法2 - range(start, stop) : 转化成从主要参数“start”到“stop”中间的整数金额
[i for i in range(2,10)]
#=> [2, 3, 4, 5, 6, 7, 8, 9]
使用方法3 - range(start, stop, step):以主要参数“step”为步幅,转化成从“start”到“stop”中间的整数金额。
[i for i in range(2,10,2)]
#=> [2, 4, 6, 8]
6. 界定一个名叫car的类,它有两个特性:“color”和“speed”。随后建立一个案例并回到“speed”。
class Car :
def ._init._(self, color, speed):
self.color = color
self.speed = speedcar = Car('red','100mph')
car.speed
#=> '100mph'