Imprimir (__ doc__) en el script Python 3

No puedo entender qué hace la print(__doc__) al principio de un script, como en este ejemplo de Scikit .

He estado buscando las cadenas de documentación de Python en google, y parece que __doc__ es útil para proporcionar alguna documentación en, digamos, funciones. Pero no puedo ver qué hace __doc__ en medio de un script.

Parece que __doc__ es útil para proporcionar alguna documentación en, digamos, funciones

Esto es verdad. Además de las funciones, la documentación también se puede proporcionar en módulos. Entonces, si tienes un archivo llamado mymodule.py como este:

 """This is the module docstring.""" def f(x): """This is the function docstring.""" return 2 * x 

Puedes acceder a sus documentos como este:

 >>> import mymodule >>> mymodule.__doc__ 'This is the module docstring.' >>> mymodule.f.__doc__ 'This is the function docstring.' 

Ahora, volviendo a su pregunta: ¿qué hace print(__doc__) ? En pocas palabras: imprime el módulo docstring. Si no se ha especificado ninguna cadena de documentos, __doc__ defecto en None .

Cualquier función, clase o módulo que comience con un literal de cadena tiene un __doc__ no vacío; esa cadena inicial se toma como la cadena de documentación; se establecerá en None si no hay tal cadena presente. Consulte la definición del término docstring en el glosario de Python.

Cuando descargues el ejemplo del script Scikit, verás que comienza con una cadena de este tipo:

 """ ================================ Recognizing hand-written digits ================================ An example showing how the scikit-learn can be used to recognize images of hand-written digits. This example is commented in the :ref:`tutorial section of the user manual `. """ 

El comando print(__doc__) simplemente reutiliza esa cadena de documentación para escribirla en su terminal cada vez que ejecute el script, y cualquier otra herramienta de Python (como la función de help() intérprete interactivo help() , por ejemplo) puede realizar una introspección del mismo valor.