From ca41dc27504c68e805472a6788c4cddbb0da28b1 Mon Sep 17 00:00:00 2001 From: Antonin ENFRUN <antonin.e@me.com> Date: Sun, 22 May 2016 19:28:04 +0200 Subject: [PATCH] py/objnamedtuple: Allow passing field names as a tuple. So the documentation's example works. Besides, a tuple can be more memory efficient. --- py/objnamedtuple.c | 5 +---- tests/basics/namedtuple1.py | 5 +++++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/py/objnamedtuple.c b/py/objnamedtuple.c index 76dc9a1fc..38cda1ad7 100644 --- a/py/objnamedtuple.c +++ b/py/objnamedtuple.c @@ -165,10 +165,7 @@ STATIC mp_obj_t new_namedtuple_type(mp_obj_t name_in, mp_obj_t fields_in) { fields_in = mp_obj_str_split(1, &fields_in); } #endif - if (!MP_OBJ_IS_TYPE(fields_in, &mp_type_list)) { - nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError, "list required")); - } - mp_obj_list_get(fields_in, &n_fields, &fields); + mp_obj_get_array(fields_in, &n_fields, &fields); return mp_obj_new_namedtuple_type(name, n_fields, fields); } MP_DEFINE_CONST_FUN_OBJ_2(mp_namedtuple_obj, new_namedtuple_type); diff --git a/tests/basics/namedtuple1.py b/tests/basics/namedtuple1.py index dfbb79f2e..346e32fbf 100644 --- a/tests/basics/namedtuple1.py +++ b/tests/basics/namedtuple1.py @@ -66,6 +66,11 @@ T3 = namedtuple("TupComma", "foo bar") t = T3(1, 2) print(t.foo, t.bar) +# Try tuple +T4 = namedtuple("TupTuple", ("foo", "bar")) +t = T4(1, 2) +print(t.foo, t.bar) + # Try single string with comma field seperator # Not implemented so far #T2 = namedtuple("TupComma", "foo,bar") -- GitLab