summaryrefslogtreecommitdiffstatshomepage
path: root/docs/differences/modules_preamble.txt
blob: 1958f0084d2dba998296350ccbdfc2dfb08d4071 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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)