diff options
| author | David Lechner <david@lechnology.com> | 2020-03-24 21:39:46 -0500 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2022-03-31 16:54:00 +1100 |
| commit | 1e99d29f362f8cccc60a36fcbd8590404c719f40 (patch) | |
| tree | 05f686b181fdb078dbc2595809f2e24d2fa3a2db /tests/basics/fun_calldblstar4.py | |
| parent | bb70874111dbb246624a68c013e8f1c3245ca0d8 (diff) | |
py/runtime: Allow multiple **args in a function call.
This is a partial implementation of PEP 448 to allow multiple ** unpackings
when calling a function or method.
The compiler is modified to encode the argument as a None: obj key-value
pair (similar to how regular keyword arguments are encoded as str: obj
pairs). The extra object that was pushed on the stack to hold a single **
unpacking object is no longer used and is removed.
The runtime is modified to decode this new format.
Signed-off-by: David Lechner <david@pybricks.com>
Diffstat (limited to 'tests/basics/fun_calldblstar4.py')
| -rw-r--r-- | tests/basics/fun_calldblstar4.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/basics/fun_calldblstar4.py b/tests/basics/fun_calldblstar4.py new file mode 100644 index 000000000..acb332a8c --- /dev/null +++ b/tests/basics/fun_calldblstar4.py @@ -0,0 +1,33 @@ +# test calling a function with multiple **args + + +def f(a, b=None, c=None): + print(a, b, c) + + +f(**{"a": 1}, **{"b": 2}) +f(**{"a": 1}, **{"b": 2}, c=3) +f(**{"a": 1}, b=2, **{"c": 3}) + +try: + f(1, **{"b": 2}, **{"b": 3}) +except TypeError: + print("TypeError") + +# test calling a method with multiple **args + + +class A: + def f(self, a, b=None, c=None): + print(a, b, c) + + +a = A() +a.f(**{"a": 1}, **{"b": 2}) +a.f(**{"a": 1}, **{"b": 2}, c=3) +a.f(**{"a": 1}, b=2, **{"c": 3}) + +try: + a.f(1, **{"b": 2}, **{"b": 3}) +except TypeError: + print("TypeError") |
