面试题1:Python中的列表推导式是什么?请给出一个例子。
回答:
列表推导式(List Comprehension)是Python中一种非常强大且简洁的构建列表的工具。它允许你通过一个表达式来创建一个新的列表,这个表达式定义了新列表中的元素应该如何从旧列表或其他可迭代对象中派生出来。列表推导式通常比使用循环来构建列表更加简洁和易读。
例子:
假设我们有一个数字列表,我们想创建一个新列表,其中包含原列表中每个数字的平方。使用列表推导式,我们可以这样做:
original_list = [1, 2, 3, 4, 5]
squared_list = [x**2 for x in original_list]
print(squared_list)
这段代码会输出:[1, 4, 9, 16, 25]
。这里,[x**2 for x in original_list]
就是一个列表推导式,它遍历original_list
中的每个元素x
,计算x
的平方,并将结果收集到一个新的列表中。
面试题2:解释一下Python中的装饰器是什么,并给出一个使用装饰器的例子。
回答:
装饰器是Python中的一个高级且非常有用的功能,它允许你在不修改原有函数代码的情况下,为函数添加新的功能。装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数。这个新的函数通常会在原有函数的基础上增加一些额外的功能,比如日志记录、性能测试、事务处理、缓存等。
使用装饰器的好处是,你可以将额外的功能与原有的函数逻辑分离,使得代码更加清晰和易于维护。同时,装饰器也提高了代码的复用性,因为你可以将同一个装饰器应用到多个不同的函数上。
例子:
下面是一个使用装饰器的例子,我们定义了一个timer
装饰器,用于测量函数的执行时间。
import time
def timer(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"{func.__name__} executed in {end_time - start_time} seconds.")
return result
return wrapper
@timer
def some_function(n):
sum = 0
for i in range(n):
sum += i
return sum
print(some_function(1000000))
在这段代码中,timer
是一个装饰器,它接受一个函数func
作为参数,并返回一个新的函数wrapper
。wrapper
函数在调用原始函数func
之前和之后分别记录时间,从而测量函数的执行时间。
@timer
语法是Python提供的一种方便的应用装饰器的方式,它相当于some_function = timer(some_function)
。这样,当我们调用some_function(1000000)
时,实际上调用的是wrapper
函数,它会测量some_function
的执行时间并打印出来。