Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

I ran into these lines of code in the QPYTHON Android app. They are part of a sample that uses the Bottle module to create a simple Web server that seems to work fine.

app = Bottle()
app.route('/', method='GET')(home)
app.route('/__exit', method=['GET','HEAD'])(__exit)
app.route('/__ping', method=['GET','HEAD'])(__ping)
app.route('/assets/<filepath:path>', method='GET')(server_static)

Now, I know that all the functions in parentheses after the call have already been wrapped with the @route decorator above this. For example:

@route('/__ping')
def __ping():
    return "ok"

But I have no idea what putting things in parentheses after other things does in Python, and after trying a hundred different permutations of "functions in parentheses after functions" I gave up.

I throw myself on the mercy of the Exchange.

share|improve this question
    
It looks like the function route returns another function, and that dynamically selected function is then called with the argument home (for instance). Look up higher-order functions. –  Kilian Foth Jul 9 at 10:43
    
"putting things in parentheses after other things" calls the other things - foo(bar, baz) calls foo with the arguments bar and baz, foo(bar)(baz) calls foo with the argument bar and then calls whatever foo returns with the argument baz. In this case, @route is a decorator (i.e. a callable that returns a callable) that takes parameters: stackoverflow.com/questions/5929107/… –  jonrsharpe Jul 9 at 11:27

1 Answer 1

up vote 1 down vote accepted

This:

app.route('/', method='GET')(home)

... Is the same as this:

func = app.route('/', method='GET')
func(home)

In other words, app.route(...) returns a function, which is then called.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.