Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7934781
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 3, 20262026-06-03T21:44:09+00:00 2026-06-03T21:44:09+00:00

How can I wrap a recursive function, recursive calls included? For example, given foo

  • 0

How can I wrap a recursive function, recursive calls included? For example, given foo and wrap:

def foo(x):
    return foo(x - 1) if x > 0 else 1

def wrap(f):
    def wrapped(*args, **kwargs):
        print "f was called"
        return f(*args, **kwargs)

    return wrapped

wrap(foo)(x) will only output "f was called" with the first call. Recursive calls still address foo().

I don’t mind monkey patching, or poking around internals. I’m not planning to add this code to the next nuclear warhead handling program, so even if it’s a bad idea, I’d like to achieve the effect.

Edit: for example, would patching foo.func_globals to override foo.__name__ work? If it always does, any side-effects I should be minding?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-03T21:44:10+00:00Added an answer on June 3, 2026 at 9:44 pm

    It works if you use your wrapper function as a decorator.

    def wrap(f):
        def wrapped(*args, **kwargs):
            print "f was called"
            return f(*args, **kwargs)
    
        return wrapped
    
    @wrap
    def foo(x):
        return foo(x - 1) if x > 0 else 1
    

    Reason being that in your example, you’re only calling the result of the wrap function once. If you use it as a decorator it actually replaces the definition of foo in the module namespace with the decorated function, so its internal call resolves to the wrapped version.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

How can I write a wrapper that can wrap any function and can be
I need to write a delegate function that can 'wrap' some while/try/catch code around
I would like to have a function that can wrap any other function call.
So I know that you can wrap a function around another function by doing
In jQuery you can wrap all your code in $(function() { ... }); and
Is there code in VBA I can wrap a function with that will let
Simpler Example Let's try a simpler example, so people can wrap their heads around
I'm trying to build a rectangular grid that can wrap around at the edges.
Primitive types are not allowed in ArrayList, source . Partial solution: you can wrap
Can't wrap my head around this... class User < ActiveRecord::Base has_many :fantasies, :through =>

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.