鱼C论坛

 找回密码
 立即注册
查看: 1207|回复: 3

[已解决]在0基础学python中的第33讲课后题的代码中为什么要使用 if 'f' in locals()

[复制链接]
发表于 2020-8-14 15:51:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
try:
    f = open('My_File.txt') # 当前文件夹中并不存在"My_File.txt"这个文件T_T
    print(f.read())
except OSError as reason:
    print('出错啦:' + str(reason))
finally:
    if 'f' in locals(): # 如果文件对象变量存在当前局部变量符号表的话,说明打开成功
        f.close()
在0基础学python中的第33讲课后题最后一问的代码中
其中 if 'f' in locals()的locals()函数实在是不知道是怎么应用在这里的,百度出来的locals()函数的使用方法也用不到里面,所以想问下大家这里为什么要使用这个函数,或者是是什么原理。
最佳答案
2020-8-14 15:53:10
locals() 就是变量字典:
>>> i = 1
>>> locals()    # 前面定义过一个名字为 i 的变量
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'i': 1}

if 'f' in locals() 就是判断名字为 f 的变量是否定义过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-14 15:53:10 | 显示全部楼层    本楼为最佳答案   
locals() 就是变量字典:
>>> i = 1
>>> locals()    # 前面定义过一个名字为 i 的变量
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'i': 1}

if 'f' in locals() 就是判断名字为 f 的变量是否定义过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-14 16:52:09 | 显示全部楼层
zltzlt 发表于 2020-8-14 15:53
locals() 就是变量字典:

可以理解为locals()是对 f 进行判断他是否有一个类型,或者说是否在内存里被保存在一个地址,如果有则返回真,没有返回假,请问大概设这样吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-14 17:11:04 | 显示全部楼层
加油~~~~ 发表于 2020-8-14 16:52
可以理解为locals()是对 f 进行判断他是否有一个类型,或者说是否在内存里被保存在一个地址,如果有则返 ...

没有那么复杂,就是看是否定义过这个f变量,和类型没有关系,定义过返回真,否则返回假
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 11:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表