diff options
| author | Angus Gratton <angus@redyak.com.au> | 2024-01-17 11:55:20 +1100 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2024-01-25 11:56:38 +1100 |
| commit | 307ecc5707e78c62b0b9fb1c0ba8dcb9c4cc5559 (patch) | |
| tree | 8ff67bd0f35bd6c766c55b2949228fa3a4d9850a /docs/differences/modules_preamble.txt | |
| parent | c8772b7baa972f17c08f82af584ac2b13f4c1737 (diff) | |
docs: Add note about position-only arguments in CPython vs MicroPython.
Required modifying the gen-cpydiff.py code to allow a "preamble" section to
be inserted at the top of any of the generated files.
This work was funded through GitHub Sponsors.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
Diffstat (limited to 'docs/differences/modules_preamble.txt')
| -rw-r--r-- | docs/differences/modules_preamble.txt | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/docs/differences/modules_preamble.txt b/docs/differences/modules_preamble.txt new file mode 100644 index 000000000..1958f0084 --- /dev/null +++ b/docs/differences/modules_preamble.txt @@ -0,0 +1,33 @@ +.. Preamble section inserted into generated output + +Positional-only Parameters +-------------------------- + +To save code size, many functions that accept keyword arguments in CPython only accept positional arguments in MicroPython. + +MicroPython marks positional-only parameters in the same way as CPython, by inserting a ``/`` to mark the end of the positional parameters. Any function whose signature ends in ``/`` takes *only* positional arguments. For more details, see `PEP 570 <https://peps.python.org/pep-0570/>`_. + +Example +~~~~~~~ + +For example, in CPython 3.4 this is the signature of the constructor ``socket.socket``:: + + socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None) + +However, the signature documented in :func:`MicroPython<socket.socket>` is:: + + socket(af=AF_INET, type=SOCK_STREAM, proto=IPPROTO_TCP, /) + +The ``/`` at the end of the parameters indicates that they are all positional-only in MicroPython. The following code works in CPython but not in most MicroPython ports:: + + import socket + s = socket.socket(type=socket.SOCK_DGRAM) + +MicroPython will raise an exception:: + + TypeError: function doesn't take keyword arguments + +The following code will work in both CPython and MicroPython:: + + import socket + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) |
