面试必备(背)70道Python经典面试题

一、单选题

1. 下列哪个表达式在Python中是非法的?( B)

A. x = y = z = 1
B. x = (y = z + 1)
C. x, y = y, x
D. x += y

2.  如何解释下面的执行结果? (B)

print 1.2 - 1.0 == 0.2
False
A. Python的实现有错误
B. 浮点数无法精确表示
C. 布尔运算不能用于浮点数比较
D. Python将非0数视为False

3.  下列代码执行结果是什么? (D)

x = 1
def change(a):
x+= 1
print x
change(x)
A. 1
B. 2
C. 3
D. 报错

4. 下列哪种类型是Python的映射类型?(D)

A. str
B. list
C. tuple
D. dict

5. 下列哪种不是Python元组的定义方式?(A) 

A. (1)
B. (1, )
C. (1, 2)
D. (1, 2, (3, 4))

6. a与b定义如下,下列哪个是正确的?(B) 

a = ‘123’
b = ‘123’
A. a != b
B. a is b
C. a == 123
D. a + b = 246

7. 下列代码运行结果是?(C) 

a = map(lambda x: x**3, [1, 2, 3])
list(a)
A. [1, 6, 9]
B. [1, 12, 27]
C. [1, 8, 27]
D. (1, 6, 9)

8. 下面代码运行后,a、b、c、d四个变量的值,描述错误的是?(D)

import copy
a = [1, 2, 3, 4, [‘a’, ‘b’]]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(5)
a[4].append(‘c’)
A. a == [1,2, 3, 4, [‘a’, ‘b’, ‘c’], 5]
B. b == [1,2, 3, 4, [‘a’, ‘b’, ‘c’], 5]
C. c == [1,2, 3, 4, [‘a’, ‘b’, ‘c’]]
D. d == [1,2, 3, 4, [‘a’, ‘b’, ‘c’]]

9. 一个段代码定义如下,下列调用结果正确的是?(A)

def bar(multiple):
def foo(n):
return multiple ** n
return foo
A. bar(2)(3) == 8
B. bar(2)(3) == 6
C. bar(3)(2) == 8
D. bar(3)(2) == 6

10. 下列代码运行结果是?(C) 

a = ‘a’
print a > ‘b’ or ‘c’
A. a
B. b
C. c
D. True
E. False

二、简答题

1. Python中的不可变数据类型和可变数据类型是什么意思?

【参考答案】:

不可变数据类型是指不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象(一个地址)。数值型、字符串string和元组tuple都属于不可变数据类型。

可变数据类型是指允许变量的值发生变化,即如果对变量执行append、+=等操作,只会改变变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化。不过对于相同的值的不同对象,在内存中会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。列表list和字典dict都属于可变数据类型。

2. 请简述Python中is和==的区别?

【参考答案】:

Python中的对象包含三个要素:id、type和value。is 比较的是两个对象的 id== 比较的是两个对象的 value

3. 请简述function( *args, **kwargs)中的 args, kwargs分别是什么意思?

【参考答案】:

 argskwargs 主要用于函数定义的参数。Python语言允许将不定数量的参数传给一个函数,其中 args 表示一个非键值对的可变参数列表,kwargs 则表示不定数量的键值对参数列表。注意:*args  * *kwargs 可以同时在函数的定义中,但是 *args 必须在 **kwargs 前面。

4. 请简述面向对象中__new__和__init__的区别。

【参考答案】:

(1)__new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别。

(2) __new__返回生成的实例,可以返回父类(通过super(当前类名, cls)的方式)__new__出来的实例,或者直接是对象的__new__出来的实例。这在自己编程实现__new__时要特别注意。

(3) __init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值。

(4) 如果__new__创建的是当前类的实例,会自动调用__init__,通过返回语句里面调用的__new__函数的第一个参数是cls来保证是当前类实例,如果是其他类的类名,那么实际创建并返回的就是其他类的实例,也就不会调用当前类或其他类的__init__函数。

5. Python子类继承自多个父类时,如多个父类有同名方法,子类将继承自哪个方法?

【参考答案】: 

Python语言中子类继承父类的方法是按照继承的父类的先后顺序确定的,例如,子类A继承自父类B、C,且B、C中具有同名方法Test(),那么A中的Test()方法实际上是继承自B中的Test()方法。

6. post 和 get的区别?

【参考答案】:

(1)GET是从服务器上获取数据,POST是向服务器传送数据。
(2)在客户端,GET方式在通过URL提交数据,数据在URL中可以看到,POST方式,数据放置在HTML——HEADER内提交。
(3)对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用Request.Form获取提交的数据。

7. Python中的列表和元组有什么区别?

【参考答案】: 

(1)列表可以被编辑,元组不能被编辑。
(2)列表比元组慢一些,元组比列表快一些。
(3)列表使用[]表示,元组使用()表示。

8. Python是如何解释语言的?

【参考答案】:

Python在运行之前不需要对程序进行解释。因此,Python是一种解释型语言。

9. 如何在Python中管理内存?

【参考答案】: 

python中的内存管理由Python私有堆空间管理。所有Python对象和数据结构都位于私有堆中。程序员无权访问此私有堆。python解释器负责处理这个问题。

Python对象的堆空间分配由Python的内存管理器完成。核心API提供了一些程序员编写代码的工具。
Python还有一个内置的垃圾收集器,它可以回收所有未使用的内存,并使其可用于堆空间。

10. Python中的命名空间是什么?

上一页1234下一页


留言