Найти, где определена функция python - PullRequest
1 голос
/ 10 января 2020

Я пытаюсь улучшить набор python файлов, написанных сотрудником. Существует много сценариев, и каждый сценарий вызывает все функции и классы из других файлов

from file1.py import *
from file2.py import *
...

И иногда сложно понять, где определены функции. Есть ли короткий способ найти расположение функций? А также их определения? Также, если возможно, где используется переменная? Я использую VSCode.

Ответы [ 2 ]

1 голос
/ 10 января 2020

Таким образом, я был в этом точном сценарии, и мой процесс был следующим:

Сценарий, где file2.py включает в себя операторы типа from file1 import *.

  1. В file1.py я скопировал бы все операторы импорта и вставил бы их в file2.py
  2. Я скопировал бы все верхние уровня функций / классов и установите их как разделенные запятыми, и замените * in file2.py : from file1 import file1_method1, file1_method2, file1_class1.
    У меня нет кода VS, но я Я уверен, что есть способ посмотреть на представление «Структура файла», скопировать список и переформатировать его в оператор импорта.
  3. Повторите шаги 1-2 для каждого from x import *, лучше всего начинать с основных файлов, затем перейдите к зависимым файлам (уменьшите количество вложенных операторов import *)
  4. Поиск file2.py для любых операторов eval(), которые могут ссылаться другие модули, и импортируйте их вручную. Если нет eval(), пропустите.
  5. Необязательно: Сортируйте операторы импорта (да, OCD!)
  6. После того, как это будет сделано, я позволю линтеру работать, и удалите все неиспользуемые ссылки (включая дубликаты импорта), кроме тех, которые необходимы для eval, возможно, добавьте комментарий для linter, чтобы игнорировать их.
  7. Запустите свой код и молитесь, чтобы вы не допустили ошибок (ничего страшного, если вы не!)
  8. Повторите 1-7 для каждого файла в вашем приложении!
  9. ???
  10. Прибыль!

Это было непросто, но после всей этой работы стоило того, чтобы отследить, что и где используется в каждом файле.

1 голос
/ 10 января 2020

Если вы хотите знать, откуда берется конкретная функция, я думаю, вы можете найти модуль, используя свойство __module__. Вы можете использовать:

print(myFunction.__module__)

Чтобы получить файл, из которого он был импортирован. Затем вы можете использовать:

print(myModule.__file__) 

Чтобы определить путь к файлу, из которого взят модуль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...