web-dev-qa-db-fra.com

Quand une fonction d'un module de bibliothèque standard est-elle appelée fonction intégrée?

Je suis confus au sujet du terme fonction "intégrée". Je pensais que cela signifiait uniquement les fonctions intégrées à l'interpréteur et documentées dans - 2. Fonctions intégrées
Mais il semble que les fonctions définies dans les modules de bibliothèque standard sont également des fonctions intégrées (dans certains cas). Par exemple -

>>> import os
>>> os.chdir
<built-in function chdir>
>>> import warnings
>>> warnings.warn
<built-in function warn>
>>> import json
>>> json.dumps
<function dumps at 0x7f3643a240d0> # not built-in
>>> dir
<built-in function dir>
>>> 

Alors, quand une fonction dans un module de bibliothèque standard est-elle appelée fonction intégrée et quand ne l'est-elle pas?

27
debashish

Il y a ici deux sens de "intégré", bien qu'ils signifient tous les deux "partie de l'interprète". La référence de la bibliothèque l'utilise pour indiquer qu'une fonction est disponible sans import (elle "ne fait pas partie d'un module", bien que voir builtins ). L'interpréteur lui-même l'utilise pour indiquer qu'une fonction est implémentée nativement plutôt qu'en Python (en CPython, c'est au moins nominalement implémentée en C ).

Il y a encore une autre signification du côté C: un module d'extension ( ie , un écrit en C) est intégré si le Python binaire l'intègre plutôt que de le charger si et quand nécessaire.

23
Davis Herring

Dans le livre " Fluent Python " de Luciano Ramalho, First Edition Third release 2016-03-18, publié par O ' Reilly, on lit à la page 742:

Le terme [i. e. "fonction intégrée"] fait souvent référence uniquement aux fonctions qui n'ont pas besoin d'être importées ... Mais les modules intégrés tels que sys, math, re, etc. contiennent également des fonctions intégrées.

Dans l'ensemble, ce terme semble être utilisé de manière incohérente. Mais à toutes fins pratiques, cela ne devrait pas avoir d'importance. "

4
user9611000

Une fonction intégrée, selon le manuel de référence est:

Fonctions intégrées

Un objet fonction intégré est un wrapper autour d'une fonction C. Des exemples de fonctions intégrées sont len() et math.sin() (math est un module intégré standard). Le nombre et le type des arguments sont déterminés par la fonction C. Attributs spéciaux en lecture seule: __doc__ est la chaîne de documentation de la fonction, ou None si non disponible; __name__ est le nom de la fonction; __self__ est défini sur Aucun (mais voir l'élément suivant); __module__ est le nom du module dans lequel la fonction a été définie ou Aucun s'il n'est pas disponible.

Cela fait référence à CPython, d'autres implémentations, telles que Jython utiliseraient Java au lieu de C pour implémenter leurs intégrés.


La section sur les fonctions intégrées de la bibliothèque Standard parle de choses qui sont toujours disponibles. Ceci avec constantes intégrées et types intégrés forme l'espace de noms intégré des identifiants auxquels vous pouvez toujours accéder.

Tout dans cet espace de noms intégré n'est pas une fonction intégrée ou un type intégré. Les cas notables sont ceux utilisés en mode interactif tels que help et quit/exit .

4

Eh bien, à partir de cette définition, une fonction est intégrée lorsqu'elle dit qu'elle est intégrée;)

Plus sérieusement: Python est un langage (appelons cela la partie "légale"), CPython est une (et pas la seule) implémentation du Python langage (appelons cela la partie "technique").

A partir d'un PDV légal, la définition du langage stipule qu'une implémentation doit rendre certaines fonctions (et classes et objets) disponibles sans aucune importation (IOW il y a "intégré" le langage lui-même). C'est ce que la documentation Python définit comme "intégré".

Maintenant, à partir d'un PDV technique, cela n'empêche pas une implémentation d'avoir d'autres fonctions/objets/classes "techniquement" intégrés (en ce sens qu'ils font techniquement partie du runtime) MAIS exposés en tant que parties d'un module ou package de stdlib.

3