On 2016-09-02 15:44, Ben Finney wrote: > Note that this has nothing to do with how the function is defined; in > the definition of the function, parameters are neither positional nor > keyword. You name each of them, and you define an order for them; and > neither of those makes any of them “positional” or “keyword”. > Rather, “positional argument and “keyword argument” are characteristics of > the arguments you *supply* in a particular call to the function. >
To be fair, this isn't quite the case. One can define keyword-only arguments, which must be supplied as such and don't really have an "order": """ >>> def f(arg1, arg2, *, arg3=None): ... pass ... >>> f(1, 2, 3) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: f() takes 2 positional arguments but 3 were given """ One can even omit the default argument for something keyword-only, which results in the consistent-but-initially-surprising situation of having a required keyword argument: """ >>> def g(arg1, arg2, *, arg3): ... pass ... >>> g(1, 2, 3) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: g() takes 2 positional arguments but 3 were given """ MMR... -- https://mail.python.org/mailman/listinfo/python-list