142 votes

Python peut-il imprimer une définition de fonction ?

En JavaScript, on peut imprimer la définition d'une fonction. Existe-t-il un moyen d'accomplir cela en Python ?

(Je jouais juste en mode interactif, et je voulais lire un module sans open(). J'étais juste curieux).

0 votes

Vous avez la source de la fonction. Qu'est-ce qui ne va pas avec ça ?

1 votes

Et en mode interactif, vous pouvez utiliser help(function) pour afficher la docstring de la fonction.

0 votes

Il y a un double de cette question : stackoverflow.com/questions/427453/

2voto

Denis Otkidach Points 13111

Jetez un coup d'œil à help() de la fonction pydoc module. En mode interactif, il devrait être déjà importé pour vous, alors tapez simplement help(funtion_to_describe) . Pour plus de possibilités, utilisez IPython .

0voto

Ferry Boender Points 449

Si vous importez la fonction, vous pouvez utiliser inspect.getsource. Cela fonctionnera dans l'invite interactive, mais apparemment uniquement sur les objets importés (pas sur les objets définis dans l'invite interactive).

Il ne fonctionne pas non plus sur de nombreux types de code exécuté dynamiquement, comme c'est le cas avec exec() . En Python v3.3+, vous pouvez utiliser inspect.signature() . Il semble que c'est ce que help() utilise également en interne. Cela fonctionne également avec les éléments définis de manière interactive.

Ejemplo:

import inspect

code = """
def sum(a:int, b:int=5) -> int:
  return a + b
"""

exec(code)
print(sum(2))
print("def sum{}".format(inspect.signature(sum)))

Cela se traduit par :

7
def sum(a: int, b: int = 5) -> int

Side-note : Oui, exec() est dangereux. Si vous ne savez pas pourquoi, vous ne devriez pas l'utiliser. Il est utilisé ici uniquement à des fins de démonstration.

-4voto

Amirshk Points 5379

Vous pouvez utiliser le mot-clé __doc__ :

#print the class description
print string.__doc__
#print function description
print open.__doc__

-5voto

startag.cv Points 11

Vous pouvez utiliser le __doc__ dans la fonction, prenez hog() à titre d'exemple : Vous pouvez voir l'utilisation de hog() comme ça :

from skimage.feature import hog

print hog.__doc__

La sortie sera :

Extract Histogram of Oriented Gradients (HOG) for a given image.
Compute a Histogram of Oriented Gradients (HOG) by

    1. (optional) global image normalisation
    2. computing the gradient image in x and y
    3. computing gradient histograms
    4. normalising across blocks
    5. flattening into a feature vector

Parameters
----------
image : (M, N) ndarray
    Input image (greyscale).
orientations : int
    Number of orientation bins.
pixels_per_cell : 2 tuple (int, int)
    Size (in pixels) of a cell.
cells_per_block  : 2 tuple (int,int)
    Number of cells in each block.
visualise : bool, optional
    Also return an image of the HOG.
transform_sqrt : bool, optional
    Apply power law compression to normalise the image before
    processing. DO NOT use this if the image contains negative
    values. Also see `notes` section below.
feature_vector : bool, optional
    Return the data as a feature vector by calling .ravel() on the result
    just before returning.
normalise : bool, deprecated
    The parameter is deprecated. Use `transform_sqrt` for power law
    compression. `normalise` has been deprecated.

Returns
-------
newarr : ndarray
    HOG for the image as a 1D (flattened) array.
hog_image : ndarray (if visualise=True)
    A visualisation of the HOG image.

References
----------
* http://en.wikipedia.org/wiki/Histogram_of_oriented_gradients

* Dalal, N and Triggs, B, Histograms of Oriented Gradients for
  Human Detection, IEEE Computer Society Conference on Computer
  Vision and Pattern Recognition 2005 San Diego, CA, USA

Notes
-----
Power law compression, also known as Gamma correction, is used to reduce
the effects of shadowing and illumination variations. The compression makes
the dark regions lighter. When the kwarg `transform_sqrt` is set to
``True``, the function computes the square root of each color channel
and then applies the hog algorithm to the image.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X