高频 Python 面试题解析(二)

引言

在Python的面试中,除了基础知识,还经常会涉及到一些稍微复杂的概念与问题。这篇文章将继续为大家分析一些高频Python面试题,帮助你更好地准备面试,提升自己的技术能力。
👉👉点击领取python学习资料

1. Python 中的迭代器与生成器

问题:迭代器与生成器有什么区别?如何使用?

  • 迭代器是一个实现了__iter__()__next__()方法的对象。
  • 生成器是一个使用yield关键字的函数,能够返回一个迭代器。

代码示例

# 迭代器示例
class MyIterator:
    def __init__(self, start, end):
        self.current = start
        self.end = end

    def __iter__(self):
        return self

    def __next__(self):
        if self.current >= self.end:
            raise StopIteration
        self.current += 1
        return self.current - 1

iterator = MyIterator(0, 5)
for i in iterator:
    print(i)  # 输出: 0, 1, 2, 3, 4

# 生成器示例
def my_generator(start, end):
    while start < end:
        yield start
        start += 1

gen = my_generator(0, 5)
for i in gen:
    print(i)  # 输出: 0, 1, 2, 3, 4

解析

  • 迭代器需要实现__iter__()__next__()方法,显示地管理迭代状态。
  • 生成器使用yield关键字,惰性生成数据,代码更加简洁,且内存使用效率更高。

2. Python 中的列表与元组

问题:列表与元组有什么区别?

  • 列表是可变的,可以修改其中的元素。
  • 元组是不可变的,一旦创建后不能修改。

代码示例

# 列表
lst = [1, 2, 3]
lst[0] = 10
print(lst)  # 输出: [10, 2, 3]

# 元组
tup = (1, 2, 3)
# tup[0] = 10  # 会抛出 TypeError
print(tup)  # 输出: (1, 2, 3)

解析

  • 列表可以修改元素,适用于需要动态修改数据的场景。
  • 元组不可修改,适合用于不需要修改的不可变数据,且通常会比列表更节省内存。

3. Python 中的作用域(Scope)与命名空间(Namespace)

问题:Python 中的作用域和命名空间是什么?它们的关系是什么?

  • 作用域指的是变量或名称可被访问的区域。
  • 命名空间是存储变量名及其对应值的地方,Python 中有多种命名空间,如局部命名空间、全局命名空间等。

代码示例

x = 10  # 全局变量

def func():
    x = 5  # 局部变量
    print(x)

func()  # 输出: 5
print(x)  # 输出: 10

解析

  • 局部变量在函数内部有效,覆盖了全局变量的值,除非显式使用global关键字。
  • Python会根据作用域规则查找变量,首先查找局部作用域,其次查找全局作用域,最后查找内建作用域。

4. Python 中的异常处理

问题:如何处理异常?Python 中的 tryexceptelsefinally 如何使用?

Python 提供了强大的异常处理机制,通过tryexcept来捕获异常,通过else来处理没有异常时的代码,通过finally来执行无论是否发生异常都要执行的代码。

代码示例

try:
    x = 10 / 0  # 会抛出 ZeroDivisionError
except ZeroDivisionError as e:
    print("Error:", e)
else:
    print("No errors occurred")
finally:
    print("This will always run")

解析

  • except 捕获指定的异常。
  • else 只有在没有异常时才会执行。
  • finally 无论是否有异常,都会执行,通常用于清理资源。

5. Python 中的闭包

问题:什么是闭包?闭包如何工作?

闭包是指一个函数能够记住并访问其定义时的作用域,即使在函数外部被调用。

代码示例

def outer():
    x = 10
    def inner():
        print(x)  # 访问外部函数的变量
    return inner

closure = outer()
closure()  # 输出: 10

解析

  • inner函数是一个闭包,它记住了outer函数的作用域,并能够访问outer中的变量x

结语

本文介绍了 Python 中的迭代器与生成器、列表与元组的区别、作用域与命名空间的关系、异常处理机制以及闭包等高频面试问题。掌握这些知识,将使你在面试中更加游刃有余。

👉👉点击领取python学习资料

本文是转载文章,点击查看原文
如有侵权,请联系 lx@jishuguiji.net 删除。