【问题标题】:Explanation on globals(), and getattr() with (Python 3 within Jupiter Notebook)对 global() 和 getattr() 的解释(Jupyter Notebook 中的 Python 3)
【发布时间】:2020-12-24 23:41:33
【问题描述】:

我正在寻找一种在 Jupiter 笔记本中获取所有导入版本号的方法,我遇到了这个 post。代码运行良好,但是,我想了解代码的 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

【问题讨论】:

    标签: python python-3.x jupyter-notebook


    【解决方案1】:

    globals() 返回所有全局变量的字典。当你导入一个模块时,模块名变成了一个全局变量,其值为模块对象。

    系统模块有一个__version__ 属性,其中包含模块的版本号。

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

    【讨论】:

      猜你喜欢
      • 2015-06-21
      • 2023-03-08
      • 1970-01-01
      • 2017-12-03
      • 1970-01-01
      • 2020-10-02
      • 2021-05-01
      • 2020-07-18
      • 2021-09-30
      相关资源
      最近更新 更多