关于globals()和getattr()的说明(Jupyter Notebook中的Python 3)



我正在寻找一种方法来获取Jupyter笔记本中的所有导入版本号,我遇到了这篇文章。代码运行良好,但是,我想了解代码的globals((和getters((部分。

到目前为止,我所理解的是m.name和m.version是作为一个字符串连接在一起的。然而,对于globals((中引用所有库的每一个m,让我感到困惑的是if语句中的内容。getattr((返回命名属性的值,因此在本例中,它将返回库的名称。我不确定我是否正确理解了这一点。(if getattr(m, '__version__', None))"(

# In[1]:
import pandas as pd
import numpy as np
import tensorflow as tf
print('n'.join(f'{m.__name__} {m.__version__}' for m in globals().values() if getattr(m, '__version__', None)))

输出

pandas 1.1.1
numpy 1.19.1
tensorflow 2.2.0

globals()返回所有全局变量的字典。导入模块时,模块名称将变为全局变量,其值为模块对象。

系统模块具有__version__属性,该属性包含模块的版本号。

它使用getattr(m, '__version__', None)来避免在尝试访问不具有该属性的对象的__version__属性时出错。如果属性不存在,getattr()的第三个参数是要返回的默认值。这允许生成器过滤掉不是模块的所有对象。

最新更新