由于在 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'>
即使我在函数内部使用 with
,as
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
块无法为您执行此操作。
如何在 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'>
即使我在函数内部使用 with
,as
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
块无法为您执行此操作。