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.
route
returns another function, and that dynamically selected function is then called with the argumenthome
(for instance). Look up higher-order functions.foo(bar, baz)
callsfoo
with the argumentsbar
andbaz
,foo(bar)(baz)
callsfoo
with the argumentbar
and then calls whateverfoo
returns with the argumentbaz
. In this case,@route
is a decorator (i.e. a callable that returns a callable) that takes parameters: stackoverflow.com/questions/5929107/…