interview
python-code-analysis
以下 Python 程序的运行结果是

Python 代码分析面试题, 以下 Python 程序的运行结果是?

Python 代码分析面试题, 以下 Python 程序的运行结果是?

QA

Step 1

Q:: 解释以下 Python 代码的运行结果,并说明原因:

 
x = [1, 2, 3, 4]
y = x
x[0] = 9
print(y)
 

A:: 输出结果是 [9, 2, 3, 4]。这是因为 yx 指向同一个列表对象,当 x 的内容改变时,y 也会反映出相同的变化。

Step 2

Q:: 分析以下代码的输出结果,并说明原因:

 
def func(a, b=[]):
    b.append(a)
    return b
print(func(1))
print(func(2))
 

A:: 输出结果是 [1][1, 2]。这是因为默认参数 b 只在函数定义时被初始化一次,后续调用 func 时会使用同一个 b 列表对象。

Step 3

Q:: 解释以下 Python 代码的运行结果,并说明原因:

 
def add_to_list(element, target_list=[]):
    target_list.append(element)
    return target_list
list1 = add_to_list(1)
list2 = add_to_list(2, [])
list3 = add_to_list(3)
print(list1)
print(list2)
print(list3)
 

A:: 输出结果是 [1, 3][2][1, 3]。默认参数 target_list 只在函数定义时被初始化一次,因此 list1list3 共享同一个列表,而 list2 使用的是一个新的空列表。

Step 4

Q:: 分析以下代码的输出结果,并说明原因:

 
class A:
    def __init__(self):
        self.value = 0
    def increment(self):
        self.value += 1
class B(A):
    def increment(self):
        self.value += 10
obj = B()
obj.increment()
print(obj.value)
 

A:: 输出结果是 10。类 B 继承自类 A,并重写了 increment 方法。因此,B 类的 increment 方法会增加 value 10 而不是 1

Step 5

Q:: 解释以下 Python 代码的运行结果,并说明原因:

 
list1 = [1, 2, 3]
list2 = [4, 5, 6]
result = list(map(lambda x, y: x + y, list1, list2))
print(result)
 

A:: 输出结果是 [5, 7, 9]map 函数应用 lambda 函数到 list1list2 中对应的元素,lambda 函数返回对应元素的和。

用途

面试这些内容是为了考察候选人对 Python 基础概念的理解,以及他们如何处理常见编程问题。这些问题涵盖了变量引用、默认参数、继承和多态、函数式编程等重要概念。实际生产环境中,理解这些概念有助于编写更高效、可维护的代码,避免潜在的错误。\n

相关问题

🦆
如何避免 Python 默认参数带来的副作用?

通过使用不可变对象(如 None)作为默认参数,并在函数体内初始化真正的默认值。

 
def func(a, b=None):
    if b is None:
        b = []
    b.append(a)
    return b
 
🦆
解释以下代码的输出结果,并说明原因: python x = 0 * 3 x00 = 1 printx

输出结果是 [[1], [1], [1]]。这是因为 x 中的三个子列表都引用同一个列表对象,因此对其中一个元素的修改会反映在所有引用上。

🦆
Python 中 deepcopy 和 copy 的区别是什么?

copy.copy 是浅复制,仅复制对象本身及其引用的对象,而 copy.deepcopy 是深复制,会递归复制对象及其所有子对象,创建独立的对象副本。

🦆
在 Python 中如何实现多继承?

通过定义一个类从多个父类继承,例如:

 
class A:
    pass
class B:
    pass
class C(A, B):
    pass
 

多继承需要注意类之间的依赖关系和方法解析顺序(MRO)。

🦆
解释以下代码的输出结果,并说明原因: python def outer: x = 1 def inner: printx return inner func = outer func

输出结果是 1。这是因为内部函数 inner 是一个闭包,它捕获并记住了 outer 函数的局部变量 x,即使 outer 函数已经返回。