Python find all functions in module

Как перечислить все функции в модуле Python?

У меня есть модуль python, установленный в моей системе, и я хотел бы видеть, какие функции/классы/методы доступны в нем.

Я хочу вызвать функцию doc для каждого из них. В ruby ​​я могу сделать что-то вроде ClassName.methods, чтобы получить список всех методов, доступных для этого класса. Есть что-то подобное в python?

from somemodule import foo print foo.methods # or whatever is the correct method to call 

ОТВЕТЫ

Ответ 1

inspect модуль. Также см. Модуль pydoc , функцию help() в интерактивном интерпретаторе и pydoc командной строки pydoc который генерирует необходимую документацию. Вы можете просто дать им класс, который вы хотите увидеть в документации. Они также могут генерировать, например, вывод HTML и записывать его на диск.

Ответ 2

Вы можете использовать dir(module) для просмотра всех доступных методов/атрибутов. Также проверьте PyDocs.

Ответ 3

Как только вы import редактируете модуль, вы можете просто сделать:

. Чтобы получить документы по всем функциям сразу, интерактивно. Или вы можете использовать:

. Просто перечислите имена всех функций и переменных, определенных в модуле.

Ответ 4

from inspect import getmembers, isfunction from my_project import my_module functions_list = [o for o in getmembers(my_module) if isfunction(o[1])] 

getmembers возвращает список (object_name, object_type) кортежей.

Читайте также:  Javascript get запрос параметры

Вы можете заменить isfunction любой из других функций isXXX в проверяемом модуле.

Ответ 5

import types import yourmodule print([getattr(yourmodule, a) for a in dir(yourmodule) if isinstance(getattr(yourmodule, a), types.FunctionType)]) 

Ответ 6

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

Например, я разрешаю пользователям выбирать функции точки входа для пакетов, созданных с помощью zipapp. Используя import и inspect , вы рискуете запутать запущенный код, что приведет к сбоям, распечаткам справочных сообщений, появлению диалоговых окон графического интерфейса и т.д.

Вместо этого я использую модуль ast для перечисления всех функций верхнего уровня:

import ast import sys def top_level_functions(body): return (f for f in body if isinstance(f, ast.FunctionDef)) def parse_ast(filename): with open(filename, "rt") as file: return ast.parse(file.read(), filename=filename) if __name__ == "__main__": for filename in sys.argv[1:]: print(filename) tree = parse_ast(filename) for func in top_level_functions(tree.body): print(" %s" % func.name) 

Поместив этот код в list.py и используя его в качестве ввода, я получаю:

$ python list.py list.py list.py top_level_functions parse_ast 

Конечно, переход на АСТ может быть сложным иногда даже для относительно простого языка, такого как Python, потому что AST довольно низкоуровневый. Но если у вас есть простой и понятный вариант использования, он является выполнимым и безопасным.

Хотя, недостатком является то, что вы не можете обнаружить функции, которые генерируются во время выполнения, например foo = lambda x,y: x*y .

Ответ 7

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

for i in dir(module): print i 

Ответ 8

dir(module) является стандартным способом использования script или стандартного интерпретатора, как указано в большинстве ответов.

Однако с помощью интерактивной оболочки python, например IPython, вы можете использовать табуляцию, чтобы получить обзор всех объектов, определенных в модуле. Это гораздо удобнее, чем использование script и print , чтобы узнать, что определено в модуле.

  • module. покажет вам все объекты, определенные в модуле (функции, классы и т.д.)
  • module.ClassX. покажет вам методы и атрибуты класса
  • module.function_xy? или module.ClassX.method_xy? покажет вам docstring этой функции/метода
  • module.function_x?? или module.SomeClass.method_xy?? покажет вам исходный код функции/метода.

Ответ 9

Для кода, который вы не хотите анализировать, я рекомендую использовать метод @csl, основанный на AST.

Для всего остального модуль проверки правилен:

import inspect import as module functions = inspect.getmembers(module, inspect.isfunction) 

Простой ответ выше намечен на различные ответы и комментарии, но не вызывается явно.

Ответ 10

Для глобальных функций dir() — это команда, которую нужно использовать (как упоминалось в большинстве этих ответов), однако в ней перечислены как общедоступные, так и непубличные функции.

Возвращает функции/классы, такие как:

'__all__', '_MAXCACHE', '_alphanum_bytes', '_alphanum_str', '_pattern_type', '_pickle', '_subx' 

Некоторые из них, как правило, не предназначены для общего использования в программировании (но самим модулем, за исключением случая DunderAliases, таких как __doc__ , __file__ и т.д.). По этой причине может быть бесполезно перечислять их с общедоступными (именно так Python знает, что получить, используя from module import * ).

__all__ может использоваться для решения этой проблемы, он возвращает список всех открытых функций и классов в модуле (те, которые не начинаются с подчеркивания — _ ). См. Кто-нибудь может объяснить __all__ в Python? для использования __all__ .

>>> import re >>> re.__all__ ['match', 'fullmatch', 'search', 'sub', 'subn', 'split', 'findall', 'finditer', 'compile', 'purge', 'template', 'escape', 'error', 'A', 'I', 'L', 'M', 'S', 'X', 'U', 'ASCII', 'IGNORECASE', 'LOCALE', 'MULTILINE', 'DOTALL', 'VERBOSE', 'UNICODE'] >>> 

Все функции и классы с подчеркиванием были удалены, оставив только те, которые определены как общедоступные и поэтому могут использоваться через import * .

Обратите внимание, что __all__ не всегда определяется. Если он не включен, то возникает AttributeError .

Случай этого с модулем ast:

>>> import ast >>> ast.__all__ Traceback (most recent call last): File "", line 1, in AttributeError: module 'ast' has no attribute '__all__' >>> 

Ответ 11

Ни один из этих ответов не будет работать, если вы не сможете импортировать указанный файл Python без ошибок импорта. Это было для меня, когда я просматривал файл, который исходит из большой базы кода с большим количеством зависимостей. Следующее будет обрабатывать файл как текст и искать все имена методов, начинающиеся с «def», и печатать их и их номера строк.

import re pattern = re.compile("def (.*)\(") for i, line in enumerate(open('Example.py')): for match in re.finditer(pattern, line): print '%s: %s' % (i+1, match.groups()[0]) 

Ответ 12

За исключением dir (module) или help (module), упомянутого в предыдущих ответах, вы также можете попробовать:
— Открыть ipython
— import module_name
— введите имя модуля, нажмите вкладку. Он откроет небольшое окно со списком всех функций в модуле python.
Это выглядит очень аккуратно.

Ниже приведен фрагмент всех функций модуля hashlib

(C:\Program Files\Anaconda2) C:\Users\lenovo>ipython Python 2.7.12 |Anaconda 4.2.0 (64-bit)| (default, Jun 29 2016, 11:07:13) [MSC v.1500 64 bit (AMD64)] Type "copyright", "credits" or "license" for more information. IPython 5.1.0 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython features. %quickref -> Quick reference. help -> Python own help system. object? -> Details about 'object', use 'object??' for extra details. In [1]: import hashlib In [2]: hashlib. hashlib.algorithms hashlib.new hashlib.sha256 hashlib.algorithms_available hashlib.pbkdf2_hmac hashlib.sha384 hashlib.algorithms_guaranteed hashlib.sha1 hashlib.sha512 hashlib.md5 hashlib.sha224 

Ответ 13

Вы можете использовать следующий метод, чтобы получить список всех функций в вашем модуле из оболочки:

Ответ 14

Это добавит все функции, которые определены в your_module в список.

result=[] for i in dir(unit8_conversion_methods): if type(getattr(your_module, i)).__name__ == "function": result.append(getattr(your_module, i)) 

Ответ 15

Это не (или, по крайней мере, не более) правильное использование dir (module). Код должен выглядеть следующим образом:

Или вы указываете модуль, который вы хотите: dir(‘sys’) для получения результатов от имени модуля sys. dir() возвращает ошибки, а dir(») — это то, что вам нужно. * help (») возвращает справочную информацию, если доступна для большинства функций. например; help(‘modules’) вернет информацию о помощи модуля.

Спасибо за все поданные голоса. Я использовал Python3.2.2 и другие версии 3x, когда я разместил это. Дело было в том, чтобы использовать ( «материал» ) вместо предыдущего (материал). Но я предполагаю, что вы все застряли на Python2 или используете более новые версии для ПК, не такие мобильные, как я.

Источник

How to list all functions in a Python module?

In this article we will discuss how to list all the functions in a Python module.

A Python module contains multiple different functions that allow for extensive code reusability making complex code simple. It also enhances portability of python program by changing platform dependent code into platform independent APIs

Python standard library consists of modules written in C that provide access to system functionality and modules written in python that provide general solutions for everyday problems making the life of programmers easy as it prevents writing of long code for simple problems

Using dir() to get functions in a module

Python dir() function is used to display the names of all the functions and variables present in a module. The function produces the most relevant result rather than the complete result as it list public and non-public functions.

Example

The below code gives an example of using dir() to get the relevant functions of math module.

# Importing math module import math as mt # Printing all the functions in math module using dir print(dir(mt))

Output

The output displays the most relevant function in the math module.

['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']

Using __all__ to get functions in a module

The __all__ gives a list of all public functions which are imported when using import *. It gives all the functions that do not start with an underscore (_) before them. Modules that do not define __all__ will throw an AttributeError if a user tries to get the functions within that module.

Example

The code below gives a demo of using __all__ to display different functions in re module.

# Importing re module import re # Printing different functions in re module print(re.__all__)

Output

The output gives the different functions present in re module.

['match', 'fullmatch', 'search', 'sub', 'subn', 'split', 'findall', 'finditer', 'compile', 'purge', 'template', 'escape', 'error', 'Pattern', 'Match', 'A', 'I', 'L', 'M', 'S', 'X', 'U', 'ASCII', 'IGNORECASE', 'LOCALE', 'MULTILINE', 'DOTALL', 'VERBOSE', 'UNICODE']

Using inspect to get functions in a module

Python inspect library can be used to get the functions under any module. The getmembers() function gets all the functions and variables inside a module and then isfunction filters to show only the functions. Using inspect allows for all functions in a module to be displayed unlike dir().

Example

The code given below shows use of getmembers and isfunction in inspect library to get functions of a module.

# Importing getmembers and isfunction from inspect from inspect import getmembers, isfunction # Importing math module import math as mt # Printing all the functions in math module print(getmembers(mt), isfunction)

Output

The output lists all the functions present in the math module.

[(‘__doc__’, ‘This module provides access to the mathematical functions\ndefined by the C standard.’), (‘__loader__’, ), (‘__name__’, ‘math’), (‘__package__’, »), (‘__spec__’, ModuleSpec(name=’math’, loader=, origin=’built-in’)), (‘acos’, ), (‘acosh’, ), (‘asin’, ), (‘asinh’, ), (‘atan’, ), (‘atan2’, ), (‘atanh’, ), (‘ceil’, ), (‘comb’, ), (‘copysign’, ), (‘cos’, ), (‘cosh’, ), (‘degrees’, ), (‘dist’, ), (‘e’, 2.718281828459045), (‘erf’, ), (‘erfc’, ), (‘exp’, ), (‘expm1’, ), (‘fabs’, ), (‘factorial’, ), (‘floor’, ), (‘fmod’, ), (‘frexp’, ), (‘fsum’, ), (‘gamma’, ), (‘gcd’, ), (‘hypot’, ), (‘inf’, inf), (‘isclose’, ), (‘isfinite’, ), (‘isinf’, ), (‘isnan’, ), (‘isqrt’, ), (‘ldexp’, ), (‘lgamma’, ), (‘log’, ), (‘log10’, ), (‘log1p’, ), (‘log2’, ), (‘modf’, ), (‘nan’, nan), (‘perm’, ), (‘pi’, 3.141592653589793), (‘pow’, ), (‘prod’, ), (‘radians’, ), (‘remainder’, ), (‘sin’, ), (‘sinh’, ), (‘sqrt’, ), (‘tan’, ), (‘tanh’, ), (‘tau’, 6.283185307179586), (‘trunc’, )]

Источник

Оцените статью