python 进阶刷题7

在 CPython 解释器中,一个多线程应用正在执行一个纯计算密集型任务(例如,大规模数学运算)。关于此场景下的性能表现,以下哪个说法是正确的?
A
增加线程数可以按比例提高计算性能,因为能充分利用多核CPU。
B
由于全局解释器锁(GIL)的存在,多线程无法实现真正的并行计算,性能提升非常有限甚至可能因线程切换开销而下降。
C
GIL 只影响 I/O 密集型任务,对计算密集型任务没有影响,性能取决于算法效率。
D
只有当线程数远超过 CPU 核心数时,GIL 才会成为性能瓶颈。
正确答案:B
你的答案:A
官方解析:
在CPython中,全局解释器锁(GIL)会阻止多线程在计算密集型任务中实现真正的并行计算,因为GIL确保同一时间只有一个线程可以执行Python字节码。因此,增加线程数并不会按比例提高性能,反而可能因线程切换开销导致性能下降。选项A错误,因为GIL阻止了多核CPU的充分利用;选项C错误,GIL对计算密集型任务有显著影响,而非只影响I/O密集型任务;选项D错误,GIL在计算密集型任务中总是潜在的性能瓶颈,不限于线程数远超过CPU核心数的情况。
以下代码使用了两个装饰器,执行f()后输出的顺序是?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def decorator1(func):
def wrapper():
print(“Decorator 1”)
func()
return wrapper
def decorator2(func):
def wrapper():
print(“Decorator 2”)
func()
return wrapper
@decorator1
@decorator2
def f():
print(“Function f”)
f()
A
Decorator 1 → Decorator 2 → Function f
B
Decorator 2 → Decorator 1 → Function f
C
Decorator 1 → Function f → Decorator 2
D
Decorator 2 → Function f → Decorator 1
正确答案:A
你的答案:未作答
官方解析:
Python装饰器的应用顺序是从下往上,即最靠近函数的装饰器先应用。代码中,@decorator2首先应用到f函数上,相当于f = decorator2(f);然后@decorator1应用到上述结果上,相当于f = decorator1(f)。执行f()时,先调用decorator1的wrapper函数,打印’Decorator 1’;然后调用decorator2的wrapper函数,打印’Decorator 2’;最后调用原f函数,打印’Function f’。因此输出顺序是Decorator 1 → Decorator 2 → Function f,对应选项A。题目无文字错误、逻辑矛盾、专业名称错误或规则破坏错误。
在Python3中,程序运行结果为:
1
2
3
4
lists = [1, 1, 2, 3, 4, 5, 6]
lists.remove(1)
lists.extend([7,8,9])
print(lists)
A
[2,3,4,5,6]
B
[1,2,3,4,5,6,[7,8,9]]
C
[1,2,3,4,5,6,7,8,9]
D
[2,3,4,5,6,7,8,9]
正确答案:C
你的答案:未作答
官方解析:
程序运行后的输出结果为:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
步骤解析:
初始列表: lists = [1, 1, 2, 3, 4, 5, 6]
lists.remove(1): 删除第一个值为1的元素,列表变为[1, 2, 3, 4, 5, 6]。
lists.extend([7, 8, 9]): 将[7, 8, 9]追加到列表末尾,得到[1, 2, 3, 4, 5, 6, 7, 8, 9]。
更多推荐


所有评论(0)