1. Python 面试问题及答案

Q. Python 的特点和优点是什么?

Python 可以作为编程的入门语言,因为他具备以下特质:

1. 解释性

2. 动态特性

3. 面向对象

4. 语法简洁

5. 开源

6. 丰富的社区资源

 

Q.复制的值是可变对象(列表和字典)

浅拷贝copy有两种情况:

第一种情况:复制的 对象中无 复杂 子对象,原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同。

第二种情况:复制的对象中有 复杂 子对象 (例如列表中的一个子元素是一个列表), 改变原来的值 中的复杂子对象的值  ,会影响浅复制的值。

深拷贝deepcopy:完全复制独立,包括内层列表和字典

python multchoicebox 多选题判断 python题库多选题_字符串

 

python multchoicebox 多选题判断 python题库多选题_Python_02

Q. Python的可变类型和不可变类型包含哪些?

可变类型 包含: 列表(List)、字典(Dict)、集合(Set)。

不可变类型 包含: 字符串(String)、整数(int)、小数(Float) 布尔(Bool)、元组(Tuple)

Q. 什么是 Python 字典?

字典是可变的,我们也可以用推导式的方式创建它.

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

Q. 列表和元祖有什么不同?

主要区别在于列表是可变的,元祖是不可变的。看下面的例子:

python multchoicebox 多选题判断 python题库多选题_Python_03

会出现以下错误提示:

TypeError: ‘tuple’ object does not support item assignment

关于列表和元祖的更多内容参考 Tuples vs Lists( https://data-flair.training/blogs/python-tuples-vs-lists/)

 

列表:

1)添加

  • 往列表a的尾部追加元素:a.append(i)

     

python multchoicebox 多选题判断 python题库多选题_后端_04

  • 往列表a中的任何位置追加元素:a.insert(i,elem),其中i表示索引位置,elem表示元素。

    

python multchoicebox 多选题判断 python题库多选题_开发语言_05

2)删除:

  • 删除指定位置的元素:del a[i]

     

python multchoicebox 多选题判断 python题库多选题_后端_06

  • 删除列表中的元素:  a.remove(elem)

    

python multchoicebox 多选题判断 python题库多选题_Python_07

  • 删除列表尾部的元素(有点像栈pop哈哈):a.pop()

    

python multchoicebox 多选题判断 python题库多选题_开发语言_08

3)拓展:

  • 将列表b追加到a的尾部:a.extend(b)

 

python multchoicebox 多选题判断 python题库多选题_后端_09

4)统计元素出现的次数:a.count(elem)

 

python multchoicebox 多选题判断 python题库多选题_字符串_10

5)排序:list.sort(self,key=None,reverse=False)其中key只在元素为字符串时才有用,表示按照关键字(如字符串长度)进行排序

数字:

  • 按照从小到大排序(默认从小到大排序):a.sort()

     

python multchoicebox 多选题判断 python题库多选题_开发语言_11

  • 若想要按照从大到小排序,则为:a.sort(reverse=True)

字符串:

  • 按照ASCII码的大小按照从小到大排序:

 

python multchoicebox 多选题判断 python题库多选题_python_12

  • 从大到小排序:a.sort(reverse=True)

   

python multchoicebox 多选题判断 python题库多选题_python_13

  • 按照字符串的长度进行从大到小排序:a.sort(key=len,reverse=True)

 

python multchoicebox 多选题判断 python题库多选题_后端_14

6)翻转:

  •  列表中元素翻转:a.reverse()

   

python multchoicebox 多选题判断 python题库多选题_Python_15

7)返回列表a长度:lena

8)获取元素下标:list.index(elem)

元组:

元组中有两种操作:

1)返回元组中元素的个数:tuple.count(elem)

 

python multchoicebox 多选题判断 python题库多选题_后端_16

2)查找元素的位置:tuple.index(elem,start)

 

python multchoicebox 多选题判断 python题库多选题_后端_17

Q. Python里面如何实现tuple和list的转换?

答:直接使用tuple和list函数就行了,type()可以判断对象的类型

Q、L = [1, 2, 3, 11, 2, 5, 3, 2, 5, 3],用一行代码得出 [11, 1, 2, 3, 5]

答:list(set(L))、

Q、L = [1, 2, 3, 4, 5],L[10:]的结果是?

答:空列表(当时有点紧张,一直在“空列表”和“索引超出范围”两个答案之间徘徊)。

Q、L = [1, 2, 3, 5, 6],如何得出 '12356'?

答:注意,个人觉得这个题有坑,列表的元素不是字符串,所以不能 ''.join(L) 。

以下是过程:

python multchoicebox 多选题判断 python题库多选题_字符串_18

Q、数据类型转换


list004 = [1,5,2,8,6,3,7,4,10]


要点二:字符串分割成列表:

str002 = 'abc'

list004.extend(str002)

要点三:两个列表转换为字典:

list005=['key1','key2']

list006=['a','b']

dict(zip(list005,list006))

执行结果:

要点二结果: [1,5,2,8,6,3,7,4,10,a,b,c]

要点三结果:{'key1': 'a', 'key2': 'b'}

Q. 解释 Python 中的三元表达式

与 C++不同, 在 Python 中我们不需要使用 ? 符号,而是使用如下语法:

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

如果 [expression] 为真, 则 [on true] 部分被执行。如果表示为假则 [on false] 部分被执行

 

Q. lambda省去了定义函数,map省去了写for循环过程

python multchoicebox 多选题判断 python题库多选题_python_19

Q. 什么是lambda函数?它有什么好处?

答:lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数

lambda函数:首要用途是指点短小的回调函数

lambda [arguments]:expression

>>> a=lambdax,y:x+y

>>> a(3,11)

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

线程是轻量级的进程,多线程允许一次执行多个线程。众所周知,Python 是一种多线程语言,它有一个多线程包。

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

 

Q. 解释继承

一个类继承自另一个类,也可以说是一个孩子类/派生类/子类,继承自父类/基类/超类,同时获取所有的类成员(属性和方法)。

1. 单继承- 一个子类继承自单个基类

2. 多重继承- 一个子类继承自多个基类

3. 多级继承- 一个子类继承自一个基类,而基类继承自另一个基类

 

Q. 什么是 Flask?

Flask 是一个使用 Python 编写的轻量级 Web 应用框架,使用 BSD 授权。其 WSGI 工具箱采用 Werkzeug,模板引擎则使用 Jinja2。除了 Werkzeug 和 Jinja2 以外几乎不依赖任何外部库。因为 Flask 被称为轻量级框架。

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

我们将在后续的课程中进一步讨论 Flask。

 

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

Python 用一个私有堆内存空间来放置所有对象和数据结构,我们无法访问它。由解释器来管理它。不过使用一些核心 API,我们可以访问一些 Python 内存管理工具控制内存分配。

 

Q.当退出 Python 时是否释放所有内存分配?

答案是否定的。那些具有对象循环引用或者全局命名空间引用的变量,在 Python 退出是往往不会被释放

另外不会释放 C 库保留的部分内容。

 

Q. 什么是猴子补丁?

在运行时动态修改类和模块

python multchoicebox 多选题判断 python题库多选题_开发语言_20

Hi, monkey

 

 

Q.能否解释一下 *args 和 **kwargs?

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

3

2

1

4

7

当我们不知道将会传入多少关键字参数时,使用**kwargs 会收集关键字参数。

a.1

b.2

c.7

使用 args 和 kwargs 作为参数名只是举例,可以任意替换。

 

Q. 编程实现计算文件中的大写字母数

python multchoicebox 多选题判断 python题库多选题_python_21

 

Q. 如何随机打乱列表中元素,要求不引用额外的内存空间?

我们用 random 包中的 shuffle() 函数来实现。

python multchoicebox 多选题判断 python题库多选题_后端_22

代码输出为:

python multchoicebox 多选题判断 python题库多选题_Python_23

Q. 如何用Python来进行查询和替换一个文本字符串?

答:可以使用re模块中的sub()函数或者subn()函数来进行查询和替换,

格式:sub(replacement, string[,count=0])(replacement是被替换成的文本,string是需要被替换的文本,count是一个可选参数,指最大被替换的数量)

>>> import re

>>>p=re.compile(‘blue|white|red’)

>>>print(p.sub(‘colour’,'blue socks and red shoes’))

colour socks and colourshoes

>>>print(p.sub(‘colour’,'blue socks and red shoes’,count=1))

colour socks and redshoes

subn()方法执行的效果跟sub()一样,不过它会返回一个二维数组,包括替换后的新的字符串和总共替换的数量

Q. Python里面match()和search()的区别?

答:re模块中match(pattern,string[,flags]),检查string的开头是否与pattern匹配。

re模块中research(pattern,string[,flags]),在string搜索pattern的第一个匹配值。

>>>print(re.match(‘super’, ‘superstition’).span())

(0, 5)

>>>print(re.match(‘super’, ‘insuperable’))

None

>>>print(re.search(‘super’, ‘superstition’).span())

(0, 5)

>>>print(re.search(‘super’, ‘insuperable’).span())

(2, 7)

Q. 介绍一下Python下range()函数的用法?

答:列出一组数据,经常用在for in range()循环中

>>> nums = ["a","b","c","d","e"]

>>> for i in range(len(nums)):

    print(nums[i])

a

b

c

d

e

Q. Python里面如何生成随机数?

答:random模块:  import random

随机整数:random.randint(a,b):返回随机整数x,a<=x<=b

random.randrange(start,stop,[,step]):返回一个范围在(start,stop,step)之间的随机整数,不包括结束值。

随机实数:random.random( ): 返回[0,1)范围内的随机浮点数

random.uniform(a,b):返回指定范围内的浮点数。

Q. 解释 Python 中的 join() 、split() 、replace()函数

join() 函数可以将指定的字符添加到字符串中。

‘1,2,3,4,5’

split() 函数可以用指定的字符分割字符串

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

Ps: 在Python中使用split函数是使用定义的分隔符将字符串分解为更短的字符串。它给出了字符串中存在的所有单词的列表。

python multchoicebox 多选题判断 python题库多选题_字符串_24

Q. 如何删除字符串中的前置空格

前置空格是第一个非空格字符前的所有空格,使用 lstrip() 函数来删除.

‘Ayushi ‘

如图这个字符串既包含前置空格也包含后置空格. 调用 lstrip() 函数去除了前置空格。如果想去除后置空格,使用 rstrip() 函数。

a = ‘ Ayushi’

a.strip()

Q. Python代码实现删除一个list里面的重复元素

答:

1,使用set函数,set(list)

2,使用字典函数,

>>>a=[1,2,4,2,4,5,6,5,7,8,9,0]

>>> b={}

>>>b=b.fromkeys(a)

>>>c=list(b.keys())

>>> c

Q. 举例sort和sorted对列表排序,list=[0,-1,3,-10,5,9]

python multchoicebox 多选题判断 python题库多选题_python_25

Q. sorted:分别按字母和数字排序

python multchoicebox 多选题判断 python题库多选题_python_26

Q. sorted: 列表嵌套列表排序,年龄数字相同按照字母排序

python multchoicebox 多选题判断 python题库多选题_字符串_27

Q. Python 区分大小写吗?

验证 Python 是否区分大小写的方法是测试 myname 和 Myname 在程序中是不是算同一个标识符。观察以下代码的返回结果:

Myname

NameError: name ‘Myname’ is not defined

如你所见,这里出现了 NameError,所以 Python 是区分大小的语言。

Q. 如何在一个function里面设置一个全局的变量?

答:解决方法是在function的开始插入一个global声明:

def f()
global x

Q. 单引号,双引号,三引号的区别

1、单引号和双引号没有什么区别,不过单引号不用按shift,打字稍微快一点。表示字符串的时候,单引号里面可以用双引号,而不用转义字符,反之亦然。

'She said:"Yes." ' or  "She said: 'Yes.' "

2、但是如果直接用单引号扩住单引号,则需要转义,像这样:

 ' She said:\'Yes.\' '

3、三引号可以直接书写多行,通常用于大段,大篇幅的字符串

Python中的注释以#字符开头。也可以使用doc-strings(三重引号中包含的字符串)进行注释。

"""

hello

world

"""

Q. 在Python中切片是什么?

从序列类型(如列表,元组,字符串等)中选择一系列项目的机制称为切片。

list001 =['001', '001', '002', '003', '003', '004', '005', '006', '006', '008', '009', '010', 'a', 'b', 'c']

要点一: 截取前三个元素:  list001[:3]

要点二: 截取后三个元素:  list001[-3:]

要点三: 截取第三个以后的元素:  list001[3:]

要点四: 翻转元素:  list001[::-1]

执行结果:

截取列表前3个元素 ['001', '001', '002'] 

截取列表后3个元素 ['a', 'b', 'c']

截取列表第3个以后的元素 ['003', '003', '004', '005', '006', '006', '008', '009', '010', 'a', 'b', 'c']

列表按照index逆序排序: ['c', 'b', 'a', '010', '009', '008', '006', '003', '001', '006', '005', '004', '003', '002', '001']

Q、[:: - 1]表示什么?

[:: - 1]用于反转数组或序列的顺序。

Q、寻找最值max()、 min()

list002 = [1,5,2,8,6,3,7,4,10]

最小值: min(list002)

最大值: max(list002)

执行结果:

最小值:1

最大值:10

Q. Python 中标识符的命名规则?

Python 中的标识符可以是任意长度,但必须遵循以下命名规则:

1. 只能以下划线或者 A-Z/a-z 中的字母开头。

2. 其余部分只能使用 A-Z/a-z/0-9。

3. Python 标识符区分大小写。

4. 关键字不能作为标识符。Python 有以下这些关键字:

python multchoicebox 多选题判断 python题库多选题_后端_28

 

Q. 如何将字符串转换为小写?

使用 lower() 函数

‘ayushi’

转换为大写用 upper() 函数

‘AYUSHI’

要检查字符串是否为全大写或全小写,使用 isupper() 和 islower() 函数

python multchoicebox 多选题判断 python题库多选题_字符串_29

像 @ 和$这样的字符即满足大写也满足小写。

istitle() 可以检查字符串是否是标题格式。

True

 

Q. Python 中的 break / continue /pass 语句有什么作用?

我们在写代码时,有时可能只写了函数声明而没想好函数怎么写,但为了保证语法检查的正确必须输入一些东西。在这种情况下,我们使用 pass 语句。

类似的 break 语句可以跳出循环。

0

1

2

continue 语句可以跳到下一轮循环。

0

1

2

4

5

6

 

Q. 请解释 Python 中的闭包?

如果在一个内部函数里。对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就是一个闭包。

7

闭包的详细解释请点击 Closures in Python。(https://data-flair.training/blogs/python-closure/)

 

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

//运算符执行地板除法,返回结果的整数部分 (向下取整)。3

用/符号除法结果为 3.5。

**符号表示取幂. a**b 返回 a 的 b 次方

% 是取模符号。返回除法后的余数。

 

Q. Python 中有多少种运算符,解释算术运算符。

在 Python 中我们有 7 中运算符:算术运算符、关系 (比较) 运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符。

1. 加号 (+) 将两个对象的值相加。

2. 减号 (-) 将第一个对象的值减去第二个对象的值。

3. 乘号 (*) 将两个对象的值相乘。

4. 除号 (/) 将第一个对象的值除以第二个对象的值。

0.875

1.0

 

Q. 解释 Python 中的关系运算符。

关系运算符用来比较两个对象。

1. 判断小于 (<):如果符号左边的值比右边小则返回 True。

2. 判断大于 (>):如果符号左边的值比右边大则返回 True。

3. 判断小于等于 (<=):如果符号左边的值小于或等于右边则返回 True。

4. 大判断于等于 (>=):如果符号左边的值大于或等于右边则返回 True。

5. 判断等于 (==) 如果符号两边的值相等则返回 True。

6. 判断不等于 (!=) 如果符号两边的值不等则返回 True。

 

Q. 解释 Python 中的赋值和算数运算符?

这是面试中的常见题目。我们将算数运算符和赋值符号放在一起介绍。

python multchoicebox 多选题判断 python题库多选题_字符串_30

 

Q. 解释 Python 中的逻辑运算符

Python 中有三个逻辑运算符:and、or、not

python multchoicebox 多选题判断 python题库多选题_python_31

 

Q. 解释 Python 中的成员运算符

使用 in 和 not in 运算符我们可以判断某个值是否在成员中。

python multchoicebox 多选题判断 python题库多选题_Python_32

 

Q. 解释 Python 中的身份运算符

is 和 not is 运算符可以判断两个对象是否相同

python multchoicebox 多选题判断 python题库多选题_后端_33

 

Q. 解释 Python 中的位运算符

此运算符按二进制位对值进行操作。

1. 与 (&) 返回按位与结果

2

2. 或 (|) 返回按位或结果

3

3. 异或 (^) 返回按位异或结果

1

4. 取反 (~) 返回按位取反结果

-3

5. 左移位 (<<) 将符号左边数的二进制左移右边数位

4

1 的二级制 001 左移 2 位变成 100 也即十进制的 4

6. 右移位 (>>)

1

想了解关于位运算符的更多内容请点击 Operators in Python(https://data-flair.training/blogs/python-operators/)

 

Q. 如何在 Python 使用多进制数字?

除十进制以外,在 Python 中还可以使用二进制、八进制、十六进制。

1. 二进制数有 0 和 1 组成,我们使用 0b 或 0B 前缀表示二进制数

10

使用 bin() 函数可以将数字转换为二进制

‘0b1111’

2. 八进制数由数字 0-7 组成,使用前缀 0o 或 0O 表示 8 进制数

‘0o10’

3. 十六进数由数字 0-15 组成,使用前缀 0x 或者 0X 表示 16 进制数

‘0x10’

‘0xf’

 

Q. 如何获取字典中的所有键?

使用 keys() 来获取字典中的所有键

Q. 使用pop和del删除字典中的"name"字段

python multchoicebox 多选题判断 python题库多选题_Python_34

Q. IOError、AttributeError、ImportError、IndentationError、IndexError、KeyError、SyntaxError、NameError分别代表什么异常

IOError:输入输出异常

AttributeError:试图访问一个对象没有的属性

ImportError:无法引入模块或包,基本是路径问题

IndentationError:语法错误,代码没有正确的对齐

IndexError:下标索引超出序列边界

KeyError:试图访问你字典里不存在的键

SyntaxError:Python代码逻辑语法出错,不能执行

NameError:使用一个还未赋予对象的变量

Q. 问什么标识符不建议使用下划线开头?

因为在 Python 中以下划线开头的变量为私有变量,如果你不想让变量私有,就不要使用下划线开头。

Q. 介绍一下except的用法和作用?

答:try…except…except…[else…][finally…]

执行try下的语句,如果引发异常,则执行过程会跳到except语句。对每个except分支顺序尝试执行,如果引发的异常与except中的异常组匹配,执行相应的语句。如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。

try下的语句正常执行,则执行else块代码。如果发生异常,就不会执行

如果存在finally语句,最后总是会执行。

Q. python中读取Excel文件的方法

应用数据分析库pandas

python multchoicebox 多选题判断 python题库多选题_开发语言_35

Q. python正则中search和match

python multchoicebox 多选题判断 python题库多选题_Python_36

Q、什么是python模块?Python中有哪些常用的内置模块?

Python模块是包含Python代码的.py文件。

此代码可以是函数类或变量。一些常用的内置模块包括:sys、math、random、data time、JSON。

Q、什么是__init__?

__init__是Python中的方法或者结构。在创建类的新对象/实例时,将自动调用此方法来分配内存。所有类都有__init__方法。