53道Python面试问答题,帮你成为大数据工程师!

不久前,我开始担任"数据科学家"的新角色,实际上是" Python工程师"。

如果我提前了解Python的线程生命周期而不是推荐系统,我会做得更好。

本着这种精神,这是我的python面试/工作准备问题和答案。 大多数数据科学家编写了大量代码,因此这对科学家和工程师均适用。

无论您是面试应聘者,准备应聘工作还是只是精通Python,我都认为这份清单将是无价之宝。

问题是无序的。 让我们开始。

1.列表和元组有什么区别?

在我进行过的每次python /数据科学访谈中,都曾问过我这个问题。 像手背一样知道答案。

· 列表是可变的。 创建后可以对其进行修改。

· 元组是不可变的。 一旦创建了元组,就不能对其进行更改

· 列表有顺序。 它们是有序序列,通常是相同类型的对象。 即:按创建日期排序的所有用户名,[" Seth"," Ema"," Eli"]

· 元组具有结构。 每个索引可能存在不同的数据类型。 即:内存中的数据库记录,(2," Ema"," 2020–04–16")#id,名称,created_at

2.如何进行字符串插值?

在不导入Template类的情况下,有3种插值字符串的方法。

name = 'Chris'
# 1. f strings
print(f'Hello {name}')
# 2. % operator
print('Hey %s %s' % (name, name))
# 3. format
print( "My name is {}".format((name)))
3." is"和" =="有什么区别?

在我的python生涯的早期,我以为它们是相同的……您好错误。 因此,为了记录,检查身份和==检查相等性。

我们将通过一个例子。 创建一些列表并将其分配给名称。 请注意,b指向与下面的a相同的对象。

a = [1,2,3]
b = a
c = [1,2,3]

检查是否相等,并注意它们是否相等。

print(a == b)
print(a == c)
#=> True
#=> True

但是它们具有相同的身份吗? 不。

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.什么是装饰器?

每次面试中我都被问到另一个问题。 它本身值得发布,但是如果您可以逐步编写自己的示例,那么您已经准备好了。

装饰器允许通过将现有功能传递给装饰器,从而将功能添加到现有功能,该装饰器将执行现有功能以及其他代码。

我们将编写一个装饰器,该装饰器会在调用另一个函数时记录日志。

编写装饰器函数。 这需要一个函数func作为参数。 它还定义了一个函数log_function_drawn,该函数调用func()并执行一些代码print(f'{func}被调用。')。 然后返回定义的函数

def logging(func): 
    def log_function_called(): 
      print(f'{func} called.') 
        func() 
        return log_function_called

让我们编写其他函数,我们最终将装饰器添加到(但尚未)。

def my_name(): 
    print('chris')

def friends_name(): 
    print('naruto')

my_name()
friends_name()

#=> chris
#=> naruto

现在将装饰器添加到两者。

@logging
def my_name(): 
    print('chris')

@logging
def friends_name(): 
    print('naruto')

my_name()
friends_name()

#=> <function my_name at 0x10fca5a60> called.
#=> chris#=> <function friends_name at 0x10fca5f28> called.
#=> naruto

了解现在如何仅通过在其上面添加@logging就能轻松地将日志添加到我们编写的任何函数中。

5.解释范围功能

Range生成一个整数列表,有3种使用方式。

该函数接受1到3个参数。 请注意,我将每种用法都包装在列表推导中,以便我们看到生成的值。

range(stop):生成从0到" stop"整数的整数。

[i for i in range(10)]#=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

range(start,stop):生成从" start"到" stop"整数的整数。

[i for i in range(2,10)]#=> [2, 3, 4, 5, 6, 7, 8, 9]

range(start,stop,step):以" step"为间隔生成从" start"到" stop"的整数。

[i for i in range(2,10,2)]#=> [2, 4, 6, 8]

6.定义一个名为car的类,具有2个属性,即"颜色"和"速度"。 然后创建一个实例并返回速度。
class Car : 
    def __init__(self, color, speed): 
      self.color = color self.speed = speed

car = Car('red','100mph')
car.speed
#=> '100mph'
7. python中的实例,静态和类方法之间有什么区别?

实例方法:接受self参数并与类的特定实例相关。

静态方法:使用@staticmethod装饰器,与特定实例无关,并且是独立的(请勿修改类或实例属性)

类方法:接受cls参数并可以修改类本身

我们将说明一个虚构的CoffeeShop类的区别。

class CoffeeShop: 
    specialty = 'espresso'
    def __in
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值