关于全局变量()和getattr()的解释(Jupyter Notebook中的Python 3)

sxpgvts3  于 2022-12-24  发布在  Python
关注(0)|答案(1)|浏览(189)

我正在寻找一种方法来获取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
cbjzeqam

cbjzeqam1#

globals()返回所有全局变量的字典。当你导入一个模块时,模块名变成一个全局变量,它的值是模块对象。
系统模块具有__version__属性,该属性包含模块的版本号。
它使用getattr(m, '__version__', None)来避免在访问没有__version__属性的对象时出错,getattr()的第三个参数是当属性不存在时返回的默认值,这允许生成器过滤掉所有不是模块的对象。

相关问题