我正在寻找一种方法来获取Jupyter笔记本中的所有导入版本号,我遇到了这个post。代码运行良好,但是,我想了解代码中的globals()和getters()部分。
到目前为止,我所理解的是m.name和m.version作为一个字符串连接在一起。()引用了所有要打印的库,然而,让我困惑的是if语句中的内容。()返回命名属性的值,因此在本例中,它将返回库的名称,我不确定我是否正确理解了这一点。
# 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
1条答案
按热度按时间cbjzeqam1#
globals()
返回所有全局变量的字典。当你导入一个模块时,模块名变成一个全局变量,它的值是模块对象。系统模块具有
__version__
属性,该属性包含模块的版本号。它使用
getattr(m, '__version__', None)
来避免在访问没有__version__
属性的对象时出错,getattr()
的第三个参数是当属性不存在时返回的默认值,这允许生成器过滤掉所有不是模块的对象。