17个Python面试问题和答案

237 阅读8分钟

17个Python面试问题和答案

科技行业正以前所未有的速度发展。每隔一段时间,我们就会看到新的软件产品在市场上发布。因此,无论你是一个新鲜人还是一个有经验的Python开发人员,总是有机会等着你。

唯一的要求是,你必须用你的技能来说服雇主。这可以通过参加Python编程面试来实现。

但是,你必须准备好自己,否则,别人可能会得到这份工作。你可以尝试Python编程挑战,或者简单地浏览一下经常问到的Python面试问题和答案

今天,我将与你分享我在Python面试中的个人经验。我将列出他们问我的问题,包括他们可能的解决方案。所以,这将是你被录用为Python程序员的终极指南。

1- 假设我们有一个著名的 "Iris "数据集。现在只检索那些 "萼片.长度 "大于6和 "萼片.宽度 "大于3.3的记录。

代码:

import pandas as pd

iris = pd.read_csv('iris.csv')

df = pd.DataFrame(iris) 

for i, j in df.iterrows():
    if (j['sepal_length'] > 6) & (j['sepal_width'] > 3.3):
        print(j)
        print()

输出:

sepal_length          7.2
sepal_width           3.6
petal_length          6.1
petal_width           2.5
species         virginica
Name: 109, dtype: object

sepal_length          7.7
sepal_width           3.8
petal_length          6.7
petal_width           2.2
species         virginica
Name: 117, dtype: object

sepal_length          7.9
sepal_width           3.8
petal_length          6.4
petal_width             2
species         virginica
Name: 131, dtype: object

sepal_length          6.3
sepal_width           3.4
petal_length          5.6
petal_width           2.4
species         virginica
Name: 136, dtype: object

sepal_length          6.2
sepal_width           3.4
petal_length          5.4
petal_width           2.3
species         virginica
Name: 148, dtype: object

2- 假设我们有两个数组,如下所述。我们如何在两个数组中添加相应的项目?

数组:

a = [23,67,1]
b = [98,543,7]

代码:

import numpy as np

a = np.array([23,67,1])
b = np.array([98,543,7])

c = np.sum((a,b), axis=0)

j = 0

for i in c:
    print("Index_" + str(j) + ":", i)
    j += 1

输出:

Index_0: 121
Index_1: 610
Index_2: 8

3- 什么是*args**kwargs ?请分别举例说明。

这两种方法都是用来在一个函数中传递可变数量的参数。我们使用*args ,用于非关键字的参数,而**kwargs ,用于基于关键字的参数(例如:键值对)。

*args 例子:

def myFun1(*argv): 
    for a in argv: 
        print(a)
   
myFun1('Welcome', 'to', 'Live Code Stream')

输出:

Welcome
to
Live Code Stream

kwargs例子:

def myFun2(**kwargs): 
    for k, v in kwargs.items():
        print ("%s = %s" %(k, v))

myFun2(username = 'John Doe', email = 'example@domain.com', password = 'Abc123')

输出:

username = John Doe
email = example@domain.com
password = Abc123

4- 如何检查一个模块中的所有功能和属性?

我们可以在dir() 函数中传递模块名称来检索其功能和属性名称。

例如:

假设我们有一个叫m.py的模块,有一个变量和两个用户定义的函数。

name = "Juan"

def myFun():
    return

def myFun2():
    return

现在,我们可以在另一个文件中显示它的属性和函数名称,使用。

import m
print(dir(m))

输出:

['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'myFun', 'myFun2', 'name']

在这里你可以看到,dir() 函数也得到了所有的内置属性和方法。

5- 什么是Python中的字面符号?

在Python中,字面意义是指分配给一个变量或常数的数据/值。例如,Python有四种不同类型的字面符号。

  • 数值字面
  • 字符串字面意义
  • 布尔值
  • 特殊字面符号

6- 如何串联两个图元?

图元的连接是指我们可以将两个或多个图元连接起来的过程。例如,让我们假设我们有两个图元。

tuple_1 = (True,"Juan",561)
tuple_2 = (47,100,False)

现在,我们可以通过使用加号+ 符号将它们连接在一起。基本上,这个语句将把tuple_2 的元素加在tuple_1 的末尾。

tuple_1 + tuple_2

像这样。

(True, 'Juan', 561, 47, 100, False)

7- 什么是Python中的lambda?

Lambda是Python中的一个小函数,只能处理一个表达式。但是,我们可以根据需要添加任意多的参数。

一般来说,在另一个函数中使用lambda函数更为合适。

让我们使用lambda函数将14与一个通过参数传递的数字相乘。

x = lambda a: a * 14
print(x(3))

输出:

42

8- 什么是切分?

切片是一个检索字符串、数组、列表或元组的一部分的过程。基本上,我们通过一个开始和结束索引来指定我们感兴趣的数据的位置。值得注意的是,开始索引的值会被包含在结果中,而结束索引的值则被排除。

我们甚至可以传递一个步骤值来跳过一些数据。例如,从一个数组中检索每一个其他项目。

在下面的代码片段中,使用方括号[] 进行切片**。我们传递了三个参数,并用冒号: 符号将它们分开。第一个参数指定了切片的起始位置,第二个参数用于标记结束,而最后一个参数用于定义步骤**。

countries = ("Germany", "Pakistan", "China", "Turkey", "Australia", "France")

print(countries[0:5:2])

输出:

('Germany', 'China', 'Australia')

切片的三个参数都是可选的。如果我们不指定开始,那么Python将假定0索引为起始位置。同样地,当我们跳过第二个参数时,将使用数组/字符串/元组/列表的长度。而在默认情况下,Python认为1是一个步骤。

9- 什么是Python装饰器?

Python装饰器是一种用来增强现有函数或类的功能的特性。当开发者想动态地更新一个函数的工作而不实际修改它时,它是首选。

比方说,我们有一个函数可以打印网站开发人员的名字。但是,现在的要求是向用户显示一条欢迎信息,然后显示开发人员的名字。

我们可以在装饰器函数的帮助下添加这个功能。

def welcome_user(func):
    def inner(a, b):
        print("Welcome to Live Code Stream!")
        return func(a, b)
    return inner

@welcome_user
def dev_name(first_name, last_name):
    print("Developed By:", first_name, last_name)

dev_name("Juan", "Cruz Martinez")

在这里,你可以看到welcome_user() 是一个装饰器,而dev_name() 是我们动态更新的主函数。

输出:

Welcome to Live Code Stream!
Developed By: Juan Cruz Martinez

10-sort()sorted() 函数使用的是哪种算法?

sort() 和 函数实现了Timsort算法。这是因为这种排序算法非常稳定和高效。在其最坏的情况下,sorted() 大O的值是O(N log N)

11- 你如何调试Python程序?

默认情况下,Python带有一个内置的调试器,称为pdb

我们可以通过执行类似下面提到的命令来开始调试任何Python文件。

python -m pdb your-python-file.py

12- 什么是 Pickling 和 Unpickling?

在Python中,有一个非常流行的库叫做pickle。它被用来进行对象序列化。意思是说,它把一个Python对象作为输入,并把它转换成一个字节流。这个转换 Python 对象的整个过程被称为pickling

另一方面,unpickling是它的反面。在这里,一个字节流被接受为输入,并被转化为一个对象的层次结构。

13- 什么是List Comprehension?请举例说明。

列表理解是创建Python列表的一种快速方法。我们可以简单地通过迭代数据来填充列表,而不是为每个索引手动输入一个值。

假设我想创建一个列表,其每个索引都包含我名字中的一个字母,按顺序排列。

name_letters = [ letter for letter in 'Juan Cruz Martinez' ]
print( name_letters )

输出:

['J', 'u', 'a', 'n', ' ', 'C', 'r', 'u', 'z', ' ', 'M', 'a', 'r', 't', 'i', 'n', 'e', 'z']

14-(i for i in (54, 6, 71)) 它是一个元组的理解吗?

不,在 Python 中,没有元组理解这个概念。

15- 什么是Python中的猴子修补?

在运行时动态地改变一个类或模块的过程被称为 "猴子补丁"。

website_name.py

class Website_name: 
     def func(self): 
          print("Live Code Stream")

main.py

import website_name 
def welcome(self): 
     print("Welcome to Live Code Stream")
   
# replacing address of "func" with "welcome" 
website_name.Website_name.func = welcome 
obj = website_name.Website_name() 
  
# calling function "func()" whose address got replaced with function "welcome()"
obj.func() 

输出:

Welcome to Live Code Stream

你是否注意到,我实际上调用了func() 方法,但我收到的输出是来自welcome()?

16- 预测以下代码的输出?解释一下你的答案。

代码:

class Parent(object):
    x = 53

class Child_1(Parent):
    pass

class Child_2(Parent):
    pass

print(Parent.x, Child_1.x, Child_2.x)
Child_1.x = 12
print(Parent.x, Child_1.x, Child_2.x)
Parent.x = 89
print(Parent.x, Child_1.x, Child_2.x)

输出:-

53 53 53
53 12 53
89 12 89

解释:

这段代码的主要混乱点出现在最后一个print() 语句中。

在打印之前,我们只是更新了Parent 类中的x 的值。它自动更新了Child_2.x 的值,但没有更新Child_1.x 。这是因为我们已经设置了Child_1.x 的值。

换句话说,Python 试图首先使用子类的属性/方法。如果在子类中没有找到属性/方法,它才会搜索父类。

17- 如何在二叉树中显示一个给定节点的祖先?

让我们假设我们有这样的二叉树。现在,使用Python代码检索65的祖先并显示它们。

              58
            /    \
          42       3
        /    \
      0       65
    /
  17

代码:

class Node:  
    # Create a new node 
    def __init__(self, data): 
        self.data = data  
        self.left = None
        self.right = None

def displayAncestors(root, target):
    # Base case 
    if root == None: 
        return False 
      
    if root.data == target: 
        return True 
  
    # Print this node if target is present in either left or right subtree
    if (displayAncestors(root.left, target) or 
        displayAncestors(root.right, target)):
        print(root.data)
        return True

    # Else
    return False

# Test above function
root = Node(58)
root.left = Node(42)
root.right = Node(3)
root.left.left = Node(0)
root.left.right = Node(65)
root.left.left.left = Node(17)

displayAncestors(root, 65)

输出:

42
58

结论

练习面试对于找到你的理想工作是超级重要的。在今天的文章中,我们介绍了一些流行的面试问题,但你应该知道的还有很多。有整个网站可以为你的下一次面试做准备,这是一个巨大的主题,所以继续学习。