Hacker News new | past | comments | ask | show | jobs | submit login

If you want a function that's private to a function in Python you _could_ also do:

    def foo(context):
    
        def bar(x):
            return x*2
        
        baz = bar(context)

... This is particularly idiomatic for higher order functions, but I think it can be useful for other things if used with restraint.

But if you have functions that only need to be called from one calling function then I why not just inline the code and eschew having a function at all. Long function bodies for the win!




Don’t do this, it makes it a huge pain to test bar().

When you write the initial code to figure out bar, just throw that code in a unit test so you can run it any time. Stop throwing tests away!


Yes, perhaps I wasn’t clear — I’m advocating for just the inlined version, not the nested function in the general case.

The nested function is, I think, fine when it’s so tiny it’s not worth unit testing (like, it-could-have-been-a-lambda small) or when bar is returned by foo (ie foo is higher order), in which case you can test the return value. Apart from that… restraint!




Consider applying for YC's Summer 2025 batch! Applications are open till May 13

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: