python如何定位导入的函数

时间:2017-03-22 03:34:13

标签: python

import tensorflow as tf
tf.abs(x)

当运行上面的代码时,python如何定位函数tf.abs? 该函数在tensorflow / python / ops / math_ops.py中定义,为什么它可以称为tf.abs?

2 个答案:

答案 0 :(得分:0)

以下是一个示例: 包含模块bar.py的包foo暴露函数bat:

目录结构:

.
└── foo
    ├── __init__.py
    └── bar.py

bar.py的内容:

$ cat foo/bar.py
def bat():
  print('bat')

__init __。py:

的内容
$ cat foo/__init__.py
from bar import bat
__all__ = [bat]

示例代码和执行结果:

>>> import foo
>>> foo.bat
<function bat at 0x104f10140>
>>> foo.bat()
bat
>>>

答案 1 :(得分:0)

__init__.py TensorFlow导入from tensorflow.python import *进一步导入from tensorflow.python.ops import math_ops

然后通过以下方式探讨所有这些:

__all__ = [s for s in dir() if s in _exported_dunders or not s.startswith('_')]

其中_exported_dunders是一些双重强制名称的列表,它不应该公开。

关键部分是s for s in dir()。在没有参数的情况下调用dir()时,它会显示当前模块名称空间中的所有名称。因此,它最终会添加所有名称以及已导入的名称。