当前位置: 首页>>编程语言>>正文


Python面试常见的30个问题及答案

 

Python Interview Questions

Python面试问题

问题1。 Python的主要功能是什么?

python特性如下:

  1. 解释型
  2. 动态类型
  3. 面向对象
  4. 简洁明了
  5. 免费自由
  6. 有一个庞大的社区

Q.2。区分深层和浅层拷贝。

深拷贝将对象复制到另一个对象中。这意味着如果您对对象的副本进行更改,则不会影响原始对象。在Python中,我们使用函数 deepcopy(),我们导入拷贝模块,用法如下:

>>> import copy
>>> b=copy.deepcopy(a)

Deep Copy - Python Interview Questions and Answers

深层复制 – Python面试问题与解答

但是,浅拷贝会将一个对象的引用复制到另一个对象。因此,如果我们在副本中进行更改,则会影响原始对象。方法 copy(),用法如下:

>>> b=copy.copy(a)

Shallow Copy - Python Interview Questions and Answers

浅拷贝 – Python访谈问题和答案

 

Q.3。区分列表和元组。

主要区别在于列表是可变的,但元组是不可变的。例子:

>>> mylist=[1,3,3]
>>> mylist[1]=2
>>> mytuple=(1,3,3)
>>> mytuple[1]=2

Traceback (most recent call last):

File “<pyshell#97>”, line 1, in <module>

mytuple[1]=2

TypeError: ‘tuple’ object does not support item assignment

Q.4。用Python解释三元运算符。

在Python中,与C++不同,我们没有?:,但我们有:

[on true] if [expression] else [on false]

如果表达式为True,则执行[on true]下的语句。否则,在[on false]下执行。

以下是如何使用它:

>>> a,b=2,3
>>> min=a if a<b else b
>>> min

2

>>> print("Hi") if a<b else print("Bye")

Hi

 

Q.5。如何在Python中实现多线程?

线程是一个轻量级的进程,并且多线程允许我们一次执行多个线程。如您所知,Python是一种多线程语言。它有一个multi-threading包。

GIL(全局解释器锁)确保一次执行单个线程。一个线程保存GIL并在将其传递给下一个线程之前做了一些工作。这就产生了并行执行的错觉。但实际上,它只是在CPU上轮流轮流。当然,所有传递都会增加执行的开销。

问题6。在Python中解释继承。

当一个类继承自另一个类时,它被称为继承自parent /base /super类的子类/派生/子类。它继承/获取所有成员(属性和方法)。

 Python Interview Questions - inheritance in Python.

Python访谈问题 – Python中的继承

继承使我们可以重用我们的代码,并且还可以更轻松地创建和维护应用程序。 Python支持以下类型的继承:

  1. 单一继承 – 类继承自单个基类。
  2. 多重继承 – 一个类继承自多个基类。
  3. 多级继承 – 类继承自基类,而基类又继承自另一个基类。
  4. 分层继承 – 多个类继承自单个基类。
  5. 混合遗传 – 混合继承是两种或更多种类型的继承的组合。

 

Q.7。什么是Flask?

Python Flask正如我们之前讨论的那样,是一个用于Python的Web微框架。它基于’Werkzeug,Jinja 2和良好意图’BSD许可证。它的两个依赖项是Werkzeug和Jinja2。这意味着它几乎不依赖于外部库。因此,我们可以称之为轻型框架。

会话使用签名cookie来允许用户查看和修改会话内容。它会记住从一个请求到另一个请求的信息。但是,要修改会话,用户必须具有密钥Flask.secret_key。

Q.8。如何在Python中管理内存?

Python有一个私有堆空间来容纳所有对象和数据结构。作为程序员,我们无法访问它;由解释器来管理它。但是使用核心API,我们可以访问一些工具。 Python内存管理器控制分配。

此外,内置的垃圾收集器会回收所有未使用的内存,以便可以将其用于堆空间。

Q.9。在Python中解释 help()和 dir()函数。

help()函数显示文档字符串及其参数的帮助。

>>> import copy
>>> help(copy.copy)

有关copy模块中的方法copy的帮助:

copy(X)

对任意的浅拷贝操作Python对象

有关详细信息,请参阅模块的__doc__字符串。

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__’]

 

Q.10。每当你退出Python时,所有内存都是de-allocated吗?

这里的答案是否定的。该模块使用循环引用其他对象或从全局命名空间引用的对象,并不总是在退出Python时释放。

另外,C库保留的部分内存是不可能de-allocate的。

Q.11。什么是monkey补丁?

在run-time上动态修改类或模块。

>>> class A:
    def func(self):
        print("Hi")
>>> def monkey(self):
        print "Hi, monkey"
>>> m.A.func = monkey
>>> a = m.A()
>>> a.func()

输出

Hi,monkey

Q.12。 Python中的字典是什么?

A python dictionary 是我从未在其他语言中看到过的东西,比如C++或者Java编程。Python中的字典拥有key-value对。

>>> roots={25:5,16:4,9:3,4:2,1:1}
>>> type(roots)
>>> roots[9]

3

字典是可变的,我们也可以使用comprehension来创建它。

>>> roots={x**2:x for x in range(5,0,-1)}
>>> roots

{25:5,16:4,9:3,4:2,1:1}

Q.13。 * args和** kwargs是什么意思?

如果我们不知道将多少个参数传递给函数,比如当我们想要传递一个列表或一个元组值时,我们使用* args。

>>> def func(*args):
    for i in args:
        print(i)  
>>> func(3,2,1,4,7)

3

2

1

4

7

**当我们不知道将会有多少关键字参数时,它会获取关键字参数。

>>> def func(**kwargs):
    for i in kwargs:
        print(i,kwargs[i])
>>> func(a=1,b=2,c=7)

A.1

B.2

C.7

args和kwargs这个词是一个惯例,我们可以使用任何东西代替它们,但最好延用管理。

 

Q.14。编写Python逻辑来计算文件中的大写字母数。

>>> import os
>>> os.chdir('C:\\Users\\lifei\\Desktop')
>>> with open('Today.txt') as today:
    count=0
    for i in today.read():
        if i.isupper():
            count+=1
    print(count)

26

Q.15。什么是负的索引?

我们来看一个list吧。

>>> mylist=[0,1,2,3,4,5,6,7,8]

与正索引不同,负索引从右边开始搜索。

>>> mylist[-3]

6

这也有助于从后面切片:

>>> mylist[-6:-1]

[3,4,5,6,7]

Q.16。你如何本地(in-place)随机化列表的内容?

为此,我们将从random模块中导入函数 shuffle()。

>>> from random import shuffle
>>> shuffle(mylist)
>>> mylist

[3,4,8,0,5,7,6,2,1]

Q.17。用Python解释 join()和 split()。

join()允许我们通过我们指定的字符将字符串中的字符连接在一起。

>>> ','.join('12345')

“1,2,3,4,5”

split()允许我们在指定的字符周围分割一个字符串。

>>> '1,2,3,4,5'.split(',')

[‘1’,’2’,’3’,’4’,’5’]

问题18。Python是区分大小写(case-sensitive)吗?

如果语言区分myname和Myname之类的标识符,则语言为case-sensitive。换句话说,它关心小写或大写。让我们用Python尝试一下。

>>> myname='Ayushi'
>>> Myname

Traceback (most recent call last):

File “<pyshell#3>”, line 1, in <module>

Myname

NameError: name ‘Myname’ is not defined

如您所见,这引发了NameError。这意味着Python确实是case-sensitive。

 

Q.19。在Python中标识符可以多长?

在Python中,标识符可以是任意长度。除此之外,我们必须遵循一些规则来命名一个:

  1. 它只能以A-Z或a-z中的字符或下划线开头。
  2. 其余部分可以包含以下内容:A-Z /a-z /_ /0-9。
  3. 正如我们在前一个问题中所讨论的那样,Python是区分大小写的(case-sensitive)。
  4. 关键字不能用作标识符。 Python有以下关键字:
and def False import not True
as del finally in or try
assert elif for is pass while
break else from lambda print with
class except global None raise yield
continue exec if nonlocal return

 

问题20。你如何将字符串转换为小写?

我们使用 lower()方法。

>>> 'AyuShi'.lower()

“ayushi”

要将其转换为大写,我们使用 upper()。

>>> 'AyuShi'.upper()

“AYUSHI”

另外,要检查字符串是全部大写还是全部小写,我们使用方法 isupper()和 islower()。

>>> 'AyuShi'.isupper()

False

>>> 'AYUSHI'.isupper()

True

>>> 'ayushi'.islower()

True

>>> '@yu$hi'.islower()

True

>>> '@YU$HI'.isupper()

True

因此,像@和$这样的字符同时满足大小写判断。

此外, istitle()将告诉我们字符串是否属于标题情况。

>>> 'The Corpse Bride'.istitle()

True

 

Q.21。 Python中的pass语句是什么?

我们的代码中可能有时候还没有决定要做什么,但我们必须输入一些东西才能使它在语法上正确。在这种情况下,我们使用pass语句。

>>> def func(*args):
           pass 
>>>

同样,break终止循环。

>>> for i in range(7):
    if i==3: break
    print(i)

0

1

2

最后,continue语句跳到下一次迭代。

>>> for i in range(7):
    if i==3: continue
    print(i)


0

1

2

4

6

Q.22。什么是Python中的闭包?

当嵌套函数引用其封闭范围中的值时,会产生闭包。这里的重点是它记住了价值。

>>> def A(x):
        def B():
            print(x)
    return B
>>> A(7)()

7

有关闭包的更多深度解析,请参阅Python中的闭包

Q.23。解释Python中的//,%和**运算符。

//运算符执行除法(floor division)。它将返回除法结果的整数部分。

>>> 7.0//2

3

普通除法将在这里返回3.5。

同样,**执行取幂。

>>> 2**10

1024

最后,%是模数。

>>> 13%7

6

>>> 3.5%1.5

0.5

 

问题24。什么是membership操作符?

通过操作符’in’和’not in’,我们可以确认某个值是否是另一个的成员。

>>> 'me' in 'disappointment'

真正

>>> 'us' not in 'disappointment'

真正

Q.25。在Python中解释identity运算符。

操作符’是’和’不’告诉我们两个值是否具有相同的身份。

>>> 10 is '10'

False

>>> True is not False

True

 

Q.26。Python除了10进制,还可以使用那些进制?

在Python中,可以用二进制,八进制和十六进制输入数字。

  1. 二进制数由0和1组成。要输入二进制,我们使用前缀0b或0B。
>>> int(0b1010)

10

要将数字转换为二进制形式,我们使用 bin()。

>>> bin(0xf)

“0b1111”

  1. 八进制数可以包含0到7之间的数字。我们使用前缀0o或0O。
>>> oct(8)

“0o10”

  1. 十六进制数字可以包含0到15之间的数字。我们使用前缀0x或0X。
>>> hex(16)

“为0x10”

>>> hex(15)

“0xf”

问题27。如何获得字典中所有键的列表?

使用函数 keys()。

>>> mydict={'a':1,'b':2,'c':3,'e':5}
>>> mydict.keys()

dict_keys([‘a’,’b’,’c’,’e’])

Q.28。带有前导下划线的标识符的意义?

由于Python没有私有变量的概念,因此使用前导下划线来声明变量private是一种惯例。这就是为什么我们不能对我们不想私有的变量这样做。

Q.29。如何在一个语句中声明多个赋值?

有两种方法可以做到这一点:

>>> a,b,c=3,4,5 #This assigns 3, 4, and 5 to a, b, and c respectively
>>> a=b=c=3 #This assigns 3 to a, b, and c

Q.30。什么是tuple unpacking?

这是一种将一组值打包成元组的方法。

>>> mytuple=3,4,5
>>> mytuple

(3,4,5)

这将3,4和5打包成mytuple。

现在,我们将元组中的值解包为变量x,y和z(tuple unpacking)。

>>> x,y,z=mytuple
>>> x+y+z

12

 

参考资料

本文由《纯净天空》出品。文章地址: https://vimsky.com/article/3959.html,未经允许,请勿转载。