Python面试宝典第10题:精选选择题
题目1
在以下函数中,b和a的关系是___。
def add_one_to_list(lst):
lst.append(1)
return lst
a = [1, 2, 3]
b = add_one_to_list(a)
A. b是a的浅拷贝
B. b和a是同一个列表对象
C. b是a的深拷贝
D. b是a的一个子列表
题目2
以下函数的作用是___。
def operate_string(s):
return s[::-1]
A. 将字符串s转换为大写
B. 计算字符串s的长度
C. 反转字符串s中的字符顺序
D. 删除字符串s中的空格
题目3
执行下面的代码后,nums的值是___。
nums = [1, 2, 7, 9, 8, 6]
nums.sort(reverse=True)
A. [1, 2, 6, 7, 8, 9]
B. [9, 8, 7, 6, 2, 1]
C. [6, 7, 8, 9, 2, 1]
D. [6, 8, 9, 7, 2, 1]
题目4
阅读下面的代码,对于fibonacci(5),下列说法正确的是___。
def fibonacci(n, memo={}):
if n <= 1:
return n
elif n not in memo:
memo[n] = fibonacci(n-1) + fibonacci(n-2)
return memo[n]
A. fibonacci(1)会计算两次
B. fibonacci(2)会计算三次
C. fibonacci(1)和fibonacci(2)均只会计算一次
D. 时间复杂度为O(n^2)
题目5
执行下面的代码后,输出是___。
class MyClass:
def __init__(self, value):
self.value = value
def __str__(self):
return str(self.value)
obj = MyClass(10)
print(str(obj))
A. "<__main__.MyClass object at 0x...>"
B. "MyClass Object"
C. "10"
D. 报错,缺少__repr__方法
题目6
执行下面的代码后,输出是___。
def example():
x = 10
def nested():
nonlocal x
x = 20
nested()
return x
print(example())
A. 10
B. 20
C. 报错,因为nonlocal关键字不能正确引用x
D. None
题目7
阅读下面的代码,关于weak_ref()调用的说法正确的是___。
import weakref
class MyClass:
pass
obj = MyClass()
weak_ref = weakref.ref(obj)
del obj
A. 返回原对象
B. 返回None,因为原对象已被删除
C. 抛出ReferenceError
D. 引发MemoryError
题目8
阅读下面的代码,如何在不修改decorated_function的情况下,临时禁用装饰器的功能?说法正确的是___。
def advanced_decorator(func):
def wrapper(*args, **kwargs):
print("Wrapper preprocessing")
result = func(*args, **kwargs)
print("Wrapper postprocessing")
return result
return wrapper
@advanced_decorator
def decorated_function(x):
print(f"Inside function: {x}")
A. 无法实现,一旦装饰就无法临时禁用
B. 通过decorated_function.__wrapped__(*args)调用原始函数
C. 通过设置全局变量控制装饰器逻辑
D. 使用functools.wraps取消装饰效果
题目9
阅读下面的代码,说法正确的是___。
class SingletonMeta(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super().__call__(*args, **kwargs)
return cls._instances[cls]
class Singleton(metaclass=SingletonMeta):
def __init__(self, value):
self.value = value
s1 = Singleton(10)
s2 = Singleton(20)
A. s1 和 s2 是两个不同的对象
B. s1 和 s2 的 value 属性都是 20
C. s1 和 s2 是同一个对象,且 value 属性为 10
D. s1 和 s2 是同一个对象,且 value 属性为 20
题目10
阅读下面的代码,说法错误的是___。
from functools import lru_cache
@lru_cache(maxsize=None)
def expensive_calculation(x):
# 假设这是一个非常耗时的计算
return x * x
A. lru_cache可以显著提高对同一输入重复调用函数的效率
B. maxsize=None意味着缓存大小没有限制
C. 如果内存不足,Python会自动从LRU缓存中移除最近最少使用的条目
D. expensive_calculation现在是一个纯函数,其行为不受外部状态影响
答案
1、答案: B。因为列表是可变对象,通过函数修改列表会直接影响原始对象。
2、答案: C。s[::-1]是Python中切片操作的一种形式,用于从开始到结束反向取出字符串中的字符,从而实现反转。
3、答案: B。sort(reverse=True)按照降序排列列表元素。
4、答案: C。通过记忆化存储已计算过的斐波那契数,避免了重复计算,降低了时间复杂度。
5、答案: C。通过定义str方法,当对象被转换为字符串时,会返回自定义的字符串表示,这里是对象的value值"10"。
6、答案: B。nonlocal关键字用于标记一个变量是外部嵌套作用域(非全局)中的变量,因此内部函数可以修改外部函数的局部变量x。
7、答案: B。weakref.ref创建的是弱引用,当对象被垃圾回收后,弱引用不会阻止对象被销毁,访问该弱引用会返回None。
8、答案: B。Python的装饰器在应用时会保留原始函数对象作为wrapped属性,可以直接通过这个属性调用未装饰的函数版本。
9、答案: D。尽管s1初始化时传入了10,但由于SingletonMeta元类的实现,s2的创建覆盖了之前实例的value属性,使得最后的实例(s1和s2相同)的value为20。
10、答案: C。虽然LRU缓存设计用于在达到最大容量时移除最不常用的条目,但是如果没有指定maxsize或将其设置为None,则实际上不会限制缓存大小,可能导致内存使用无限制增长。