2017-09-04 3 views
0

Dire que je veux envelopper une fonction avec timeit_wrapper comme ceci:Comment envelopper une fonction d'un espace de noms différent tout en gardant le nom de la fonction?

import timeit_wrapper 

def func1(): 
    pass 

def func2(): 
    func1 = timeit_wrapper(func1) 
    func1() 

ci-dessus se traduira par une erreur référencé avant l'affectation depuis func1 est affecté à une portée locale.

Comment puis-je y parvenir de manière pythonique (sans le mot clé global)?

+0

Que diriez-vous 'wrapped_func1 = timeit_wrapper (func1)' et 'wrapped_func1()'? – Alfe

+0

Je veux qu'il soit encore appelé func1 (get_batch dans la réalité) pour rendre le code plus facile à comprendre et plus facile à changer - est-ce possible? – LearnOPhile

+2

Wow. 2 secondes pour répondre à ma question ;-) Vous êtes rapide. Alors qu'est-ce que vous n'aimez pas sur le mot-clé 'global'? Cela résoudrait votre problème, n'est-ce pas? – Alfe

Répondre

2

Que diriez-vous celui-ci:

import timeit_wrapper 

def func1(): 
    pass 

def func2(func1=func1): 
    func1 = timeit_wrapper(func1) 
    func1()