首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么函数中的变量能够从它的作用域外引用?

为什么函数中的变量能够从它的作用域外引用?
EN

Stack Overflow用户
提问于 2022-12-03 01:26:52
回答 2查看 24关注 0票数 0

在这种情况下,"all_lines“变量在上下文管理器中是独立的,它可以从函数"part_1”中访问。

代码语言:javascript
复制
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“是怎么工作的?

EN

回答 2

Stack Overflow用户

发布于 2022-12-03 01:30:54

Python没有通用的块作用域,因此在with中分配的任何内容都可以在块之外访问。

但是,context_total是不同的,因为您要在函数中重新分配它。如果在函数中赋值,则变量将被视为本地变量,除非使用global指定其他变量。但是,这在这里是有问题的,因为+=必须引用现有变量(否则您要添加什么?),但是没有这个名称的局部变量。

添加global context_total以在函数中使用它,如果不需要外部重新分配的值,则将其作为参数传递。

票数 1
EN

Stack Overflow用户

发布于 2022-12-03 01:29:26

它可以工作,因为在函数内部,all_lines变量是引用的,而不是分配的。另外两个变量被赋值。

如果在函数中分配变量,则即使存在同名的全局变量,该变量在整个函数中也被视为本地变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74663272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档