[Python] J'ai essayé de remplacer le nom de la fonction par le nom de la fonction

Conclusion

Celui assigné sera réécrit sur celui assigné. Voici les résultats expérimentaux.

Colab


#Définir func
def func(x, y):
  return x - y

func(1, 2) # -1


#Définir func0
def func0():
  return None

func0() #Pas de sortie


#Remplacer le nom de la fonction par le nom de la fonction
func0 = func

func(1, 3) # -2

func0(1, 3) # -2

Pourquoi avez-vous enquêté sur cela

Pour une raison quelconque, la méthode __call__ de la classe Module de PyTorch a été définie pour être définie une fois avec _call_impl puis affectée à __call__ comme décrit ci-dessus. Quelqu'un peut-il me dire pourquoi PyTorch a fait une description aussi gênante (sérieusement). Voici le code source.

Python:torch.nn.modules.module


def _call_impl(self, *input, **kwargs):
        for hook in itertools.chain(
                _global_forward_pre_hooks.values(),
                self._forward_pre_hooks.values()):
            result = hook(self, input)
            if result is not None:
                if not isinstance(result, tuple):
                    result = (result,)
                input = result
        if torch._C._get_tracing_state():
            result = self._slow_forward(*input, **kwargs)
        else:
            result = self.forward(*input, **kwargs)
        for hook in itertools.chain(
                _global_forward_hooks.values(),
                self._forward_hooks.values()):
            hook_result = hook(self, input, result)
            if hook_result is not None:
                result = hook_result
        if (len(self._backward_hooks) > 0) or (len(_global_backward_hooks) > 0):
            var = result
            while not isinstance(var, torch.Tensor):
                if isinstance(var, dict):
                    var = next((v for v in var.values() if isinstance(v, torch.Tensor)))
                else:
                    var = var[0]
            grad_fn = var.grad_fn
            if grad_fn is not None:
                for hook in itertools.chain(
                        _global_backward_hooks.values(),
                        self._backward_hooks.values()):
                    wrapper = functools.partial(hook, self)
                    functools.update_wrapper(wrapper, hook)
                    grad_fn.register_hook(wrapper)
        return result

    __call__ : Callable[..., Any] = _call_impl

Recommended Posts

[Python] J'ai essayé de remplacer le nom de la fonction par le nom de la fonction
vprof - J'ai essayé d'utiliser le profileur pour Python
J'ai essayé la programmation python pour la première fois.
J'ai essayé Python sur Mac pour la première fois.
J'ai essayé python pour la première fois avec heroku
[Python] J'ai essayé d'obtenir le nom du type sous forme de chaîne de caractères à partir de la fonction type
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
Notes diverses sur l'utilisation de python pour les projets
J'ai essayé tensorflow pour la première fois
Python: j'ai essayé le problème du voyageur de commerce
J'ai essayé le framework de test Python Tornado
J'ai essayé d'utiliser Kwant, un module python pour le calcul du transport quantique
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé la fonction de tableau croisé dynamique des pandas
J'ai essayé de "différencier" l'image avec Python + OpenCV
J'ai essayé Python> autopep8
J'ai essayé de simuler "Birthday Paradox" avec Python
J'ai essayé la méthode des moindres carrés en Python
J'ai essayé la synthèse de fonctions et le curry avec python
[Python] J'ai cherché le plus long Pokémon Shiritori
J'ai essayé de "binariser" l'image avec Python + OpenCV
J'ai essayé d'utiliser le module Datetime de Python
J'ai essayé Mind Meld pour la première fois
J'ai essayé d'implémenter la fonction gamma inverse en python
J'ai essayé Python> décorateur
Je veux obtenir le nom du fichier, le numéro de ligne et le nom de la fonction dans Python 3.4
J'ai essayé de représenter graphiquement les packages installés en Python
Ce que je suis entré dans Python pour la première fois
J'ai essayé pipenv et asdf pour le contrôle de version Python
J'ai essayé le tutoriel MNIST de tensorflow pour les débutants.
2017-04-11 Python> J'ai essayé le générateur> On m'a appris l'expression du générateur / la fonction du générateur / suivant ()
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé d'approcher la fonction sin en utilisant le chainer
Programme Python qui recherche le même nom de fichier
[Python] J'ai essayé de représenter graphiquement le top 10 des ombres à paupières
J'ai essayé de résoudre le problème avec Python Vol.1
AI Gaming Je l'ai essayé pour la première fois
J'ai essayé de frapper l'API avec le client python d'echonest
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
À propos de la fonction enumerate (python)
J'ai essayé la bibliothèque changefinder!
Python #function 2 pour les super débutants
J'ai essayé l'extension C de Python
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
J'ai téléchargé la source python
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé de porter le code écrit pour TensorFlow sur Theano
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé de simuler la propagation de l'infection avec Python
J'étais accro au débogueur Python pdb pendant 2 minutes
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
J'ai touché au dernier outil de test automatique "Playwright for Python"