Saya memiliki modul python yang terinstal di sistem saya dan saya'd seperti untuk dapat melihat apa fungsi/kelas/metode yang tersedia di dalamnya.
Saya ingin memanggil doc pada fungsi masing-masing. Di ruby aku bisa melakukan sesuatu seperti ClassName.metode untuk mendapatkan daftar dari semua metode yang tersedia di kelas itu. Apakah ada sesuatu yang mirip dengan python?
misalnya. sesuatu seperti:
from somemodule import foo
print foo.methods # or whatever is the correct method to call
Setelah anda've `impor indonesia modul ini, anda hanya dapat melakukan:
help(modulename)
... Untuk mendapatkan dokumen pada semua fungsi sekaligus, secara interaktif. Atau anda dapat menggunakan:
dir(modulename)
... Untuk hanya daftar nama-nama semua fungsi-fungsi dan variabel yang didefinisikan dalam modul.
The memeriksa
modul. Lihat juga pydoc
modul, membantu()
fungsi di interactive interpreter dan pydoc
command-line tool yang menghasilkan dokumentasi yang anda setelah. Anda hanya bisa memberikan mereka satu kelas yang anda inginkan untuk melihat dokumentasi. Mereka juga dapat menghasilkan, misalnya, output HTML dan menulis ke disk.
Contoh dengan memeriksa:
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 kembali daftar (object_name, object_type) tupel.
Anda dapat mengganti isfunction dengan lainnya isXXX fungsi dalam memeriksa modul.
Untuk kelengkapan' demi, aku'd ingin menunjukkan bahwa kadang-kadang anda mungkin ingin parse kode bukan mengimpornya. Sebuah impor
akan melaksanakan tingkat atas ekspresi, dan itu bisa menjadi masalah.
Sebagai contoh, saya'm membiarkan pengguna memilih entry point fungsi untuk paket-paket yang dibuat dengan zipapp. Menggunakan impor
dan memeriksa
risiko menjalankan sesat kode, yang menyebabkan crash, membantu pesan-pesan yang dicetak, GUI dialog yang muncul, dan sebagainya.
Bukannya saya gunakan ast modul untuk daftar semua tingkat atas fungsi-fungsi:
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)
Menempatkan kode ini di list.py
dan menggunakan dirinya sebagai masukan, saya mendapatkan:
$ python list.py list.py
list.py
top_level_functions
parse_ast
Tentu saja, navigasi yang AST dapat sulit kadang-kadang, bahkan untuk waktu yang relatif sederhana bahasa seperti Python, karena AST cukup rendah-tingkat. Tapi jika anda memiliki sederhana dan jelas use case, it's baik yang bisa dilakukan dan aman.
Meskipun, downside adalah bahwa anda dapat't mendeteksi fungsi yang dihasilkan pada saat runtime, seperti foo = lambda x,y: x*y
.
Untuk kode yang anda tidak ingin mengurai, saya merekomendasikan AST berbasis pendekatan @csl di atas.
Untuk segala sesuatu yang lain, memeriksa modul benar:
import inspect
import <module_to_inspect> as module
functions = inspect.getmembers(module, inspect.isfunction)
Ini memberikan daftar dari 2-tupel dalam bentuk [(<nama:str>, <nilai:fungsi>), ...]
.
Jawaban sederhana atas mengisyaratkan dalam berbagai tanggapan dan komentar, tetapi tidak disebut secara eksplisit.
dir(modul)
adalah cara standar ketika menggunakan script atau standar penerjemah, seperti yang disebutkan dalam banyak jawaban.
Namun dengan interaktif python shell seperti IPython anda dapat menggunakan tab-penyelesaian untuk mendapatkan gambaran dari semua benda-benda yang ditetapkan dalam modul.
Ini jauh lebih nyaman, daripada menggunakan script dan cetak
untuk melihat apa yang didefinisikan dalam modul.
modul.<tab>
akan menampilkan semua objek yang didefinisikan dalam modul (fungsi, kelas dan sebagainya)modul.ClassX.<tab>
akan menunjukkan kepada anda metode dan atribut-atribut dari sebuah kelasmodul.function_xy?
atau modul.ClassX.method_xy?
akan menunjukkan docstring itu fungsi / metodemodul.function_x??
atau modul.SomeClass.method_xy??
akan menampilkan source code dari fungsi / metode. Untuk fungsi-fungsi global dir()
adalah perintah untuk menggunakan (seperti yang disebutkan dalam sebagian besar dari jawaban-jawaban ini), namun ini daftar fungsi-fungsi publik dan non-publik fungsi bersama-sama.
Misalnya berjalan:
>>> import re
>>> dir(re)
Pengembalian fungsi/kelas seperti:
'__all__', '_MAXCACHE', '_alphanum_bytes', '_alphanum_str', '_pattern_type', '_pickle', '_subx'
Beberapa yang umumnya tidak dimaksudkan untuk pemrograman umum digunakan (tetapi dengan modul itu sendiri, kecuali dalam kasus DunderAliases seperti __doc__
, __file__
dll). Untuk alasan ini mungkin tidak berguna untuk daftar mereka dengan semua orang (ini adalah bagaimana Python tahu apa yang harus dapatkan ketika menggunakan dari modul impor *
).
__semua__
dapat digunakan untuk memecahkan masalah ini, ini akan menghasilkan sebuah daftar dari semua fungsi umum dan kelas-kelas dalam modul (orang-orang yang tidak mulai dengan garis bawah - _
). Lihat
https://stackoverflow.com/questions/44834/can-someone-explain-all-in-python untuk penggunaan __semua__
.
Berikut ini sebuah contoh:
>>> 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']
>>>
Semua fungsi dan kelas dengan menggarisbawahi telah dihapus, hanya menyisakan orang-orang yang didefinisikan sebagai publik dan karena itu dapat digunakan melalui impor *
.
Perhatikan bahwa __semua__
tidak selalu didefinisikan. Jika tidak disertakan maka AttributeError
dinaikkan.
Kasus ini adalah dengan ast modul:
>>> import ast
>>> ast.__all__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'ast' has no attribute '__all__'
>>>
Tidak satupun dari jawaban-jawaban ini akan bekerja jika anda tidak dapat mengimpor mengatakan Python file tanpa kesalahan impor. Ini adalah kasus untuk saya ketika saya memeriksa file yang besar berasal dari basis kode dengan banyak dependensi. Berikut ini akan memproses file sebagai teks dan mencari semua nama metode yang dimulai dengan "def" dan mencetak mereka dan nomor baris.
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])
Kecuali dir(modul) atau membantu(modul) yang disebutkan dalam jawaban sebelumnya, anda juga dapat mencoba:
Berikut ini adalah cuplikan daftar semua fungsi-fungsi dari modul 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's features.
%quickref -> Quick reference.
help -> Python's 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
Ini akan menambahkan semua fungsi yang didefinisikan di your_module dalam daftar.
result=[]
for i in dir(unit8_conversion_methods):
if type(getattr(your_module, i)).__name__ == "function":
result.append(getattr(your_module, i))