Как найти, откуда была импортирована функция в Python? - PullRequest
11 голосов
/ 13 ноября 2009

У меня есть модуль Python с функцией в нем:

  == bar.py ==
  def foo(): pass
  == EOF ==

И затем я импортирую его в глобальное пространство имен следующим образом:

from bar import *

Так что теперь функция foo доступна для меня. Если я напечатаю это:

print foo

Переводчик радостно говорит мне:

 <function foo at 0xb7eef10c>

Есть ли способ узнать, что функция foo пришла из модуля bar на данный момент?

Ответы [ 4 ]

18 голосов
/ 13 ноября 2009

foo.__module__ должен вернуться bar

Если вам нужна дополнительная информация, вы можете получить ее из sys.modules['bar'], ее атрибуты __file__ и __package__ могут быть интересны.

2 голосов
/ 13 ноября 2009

Попробуйте это:

help(foo.func_name)
1 голос
/ 13 ноября 2009

вместо

from bar import *

использовать

from bar import foo

Использование синтаксиса from ... import * является плохим стилем программирования именно из-за того, что трудно понять, откуда берутся элементы вашего пространства имен.

0 голосов
/ 17 января 2019

Если у вас есть IPython, вы также можете использовать ?:

In[16]: runfile?
Signature: runfile(filename, args=None, wdir=None, is_module=False, global_vars=None)
Docstring:
Run filename
args: command line arguments (string)
wdir: working directory
File:      /Applications/PyCharm.app/Contents/helpers/pydev/_pydev_bundle/pydev_umd.py
Type:      function

Сравнить с __module__:

In[17]:  runfile.__module__
Out[17]: '_pydev_bundle.pydev_umd'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...