由于在 with 语句中全局分配花色,python

As suit assignes globaly in with statement, python

如何在 with 语句中使 as 套装中的 VAR 成为绑定到 with 范围的非全局变量?在下面的示例中,f 变量在 with 语句之后分配给也在 with:

之外
with open("some_text.txt") as f:
    pass

print(f.closed) 
print(f)

这个returns:

>>> True
<_io.TextIOWrapper name='some_text.txt' mode='r' encoding='UTF-8'>

即使我在函数内部使用 withas var 仍然是绑定的:

def longerThan10Chars(*files):
    for my_file in files:
        with open(my_file) as f:
            for line in f:
                if len(line) >= 10:
                    print(line)
    print(f.closed)

这里 f.closed 仍然打印 True.

Python 范围边界是函数,没有别的。没有选项可以使 with 块成为作用域;如果你必须把它放在一个单独的范围内,就把它放在一个函数中; as 目标只是另一个局部变量,不会存在于该新函数之外。

或者您可以在 with 语句后通过显式删除名称来使名称消失:

with open("some_text.txt") as f:
    pass

del f

要删除 f 的绑定,请执行以下操作:

del locals()['f']

您必须手动执行此操作。 with...as 块无法为您执行此操作。