flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt
break_stmt: 'break'
continue_stmt: 'continue'
-return_stmt: 'return' [testlist]
+return_stmt: 'return' [testlist_star_expr]
yield_stmt: yield_expr
raise_stmt: 'raise' [test ['from' test]]
import_stmt: import_name | import_from
encoding_decl: NAME
yield_expr: 'yield' [yield_arg]
-yield_arg: 'from' test | testlist
+yield_arg: 'from' test | testlist_star_expr
test_inner()
def test_return(self):
- # 'return' [testlist]
+ # 'return' [testlist_star_expr]
def g1(): return
def g2(): return 1
+ def g3():
+ z = [2, 3]
+ return 1, *z
+
g1()
x = g2()
+ y = g3()
+ self.assertEqual(y, (1, 2, 3), "unparenthesized star expr return")
check_syntax_error(self, "class foo:return 1")
def test_break_in_finally(self):
def g(): f((yield 1), 1)
def g(): f((yield from ()))
def g(): f((yield from ()), 1)
+ # Do not require parenthesis for tuple unpacking
+ def g(): rest = 4, 5, 6; yield 1, 2, 3, *rest
+ self.assertEquals(list(g()), [(1, 2, 3, 4, 5, 6)])
check_syntax_error(self, "def g(): f(yield 1)")
check_syntax_error(self, "def g(): f(yield 1, 1)")
check_syntax_error(self, "def g(): f(yield from ())")
--- /dev/null
+Iterable unpacking is now allowed without parenthesis in yield and return
+statements, e.g. ``yield 1, 2, 3, *rest``. Thanks to David Cuthbert for the
+change and jChapman for added tests.
{75, 1},
};
static arc arcs_25_1[2] = {
- {9, 2},
+ {47, 2},
{0, 1},
};
static arc arcs_25_2[1] = {
};
static arc arcs_86_0[2] = {
{77, 1},
- {9, 2},
+ {47, 2},
};
static arc arcs_86_1[1] = {
{26, 2},
{341, "yield_expr", 0, 3, states_85,
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200\000"},
{342, "yield_arg", 0, 3, states_86,
- "\000\040\200\000\000\000\000\000\000\040\010\000\000\000\020\002\000\300\220\050\037\000\000"},
+ "\000\040\200\000\002\000\000\000\000\040\010\000\000\000\020\002\000\300\220\050\037\000\000"},
};
static label labels[177] = {
{0, "EMPTY"},