在这种情况下,"all_lines“变量在上下文管理器中是独立的,它可以从函数"part_1”中访问。
total = 0
with open("advent_input.txt", "r") as txt:
all_lines = []
context_total = 0
for line in txt:
all_lines.append((line.rstrip().split(" ")))
def part_1():
# total = 0
for line in all_lines:
if line[0] == "A":
if line[1] == "Y":
total += 8
elif line[1] == "X":
context_total += 4然而,"context_total“在上下文管理器中也是无效的,在"part_1”函数中不起作用。全球范围内的“总计”也不起作用。"all_lines“是怎么工作的?
发布于 2022-12-03 01:30:54
Python没有通用的块作用域,因此在with中分配的任何内容都可以在块之外访问。
但是,context_total是不同的,因为您要在函数中重新分配它。如果在函数中赋值,则变量将被视为本地变量,除非使用global指定其他变量。但是,这在这里是有问题的,因为+=必须引用现有变量(否则您要添加什么?),但是没有这个名称的局部变量。
添加global context_total以在函数中使用它,如果不需要外部重新分配的值,则将其作为参数传递。
发布于 2022-12-03 01:29:26
它可以工作,因为在函数内部,all_lines变量是引用的,而不是分配的。另外两个变量被赋值。
如果在函数中分配变量,则即使存在同名的全局变量,该变量在整个函数中也被视为本地变量。
https://stackoverflow.com/questions/74663272
复制相似问题