Python中局部变量作用域问题

最近在自学Python,跟着书上的代码写了一个课后习题,对这一块的局部变量作用域问题没搞明白,哪位大佬帮忙看看~
如下:
其中lines并没有声明一个全局变量,获取到值之后为什么能在for循环里面继续使用呢?按理说for循环和with open是同级的,lines应该像fileName那样全局声明一下才能在for循环里面使用啊。。。

fileName = 'pi.txt'
with open(fileName) as f:
    lines = f.readlines()
str = ''
for line in lines:
    str +=line.strip()
print(str)
阅读 1.1k
2 个回答

python 只有函数级作用域(以及全局作用域),没有块级作用域,所以 lines 也是全局的。

with是一种魔术方法,等效于

f= open(fileName)
lines = f.readlines()
f.close()

使用with方法的好处就是可以避免忘记关闭文件而造成的问题
作用域参见楼上的回答

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题