bpo-34854: Fix compiling string annotations containing lambdas. (GH-9645)


* Compiling a string annotation containing a lambda with keyword-only
argument without default value caused a crash.

* Remove the final "*" (it is incorrect syntax) in the representation of
lambda without *args and keyword-only arguments when compile from AST.

* Improve the representation of lambda without arguments.
(cherry picked from commit 2a2940e5c3e6d92f4fac5e9d361a1e224bb2f12e)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
diff --git a/Lib/test/test_future.py b/Lib/test/test_future.py
index 61cd634..70da0cf 100644
--- a/Lib/test/test_future.py
+++ b/Lib/test/test_future.py
@@ -178,11 +178,12 @@
         eq('-1')
         eq('~int and not v1 ^ 123 + v2 | True')
         eq('a + (not b)')
+        eq('lambda: None')
         eq('lambda arg: None')
         eq('lambda a=True: a')
         eq('lambda a, b, c=True: a')
         eq("lambda a, b, c=True, *, d=1 << v2, e='str': a")
-        eq("lambda a, b, c=True, *vararg, d=v1 << 2, e='str', **kwargs: a + b")
+        eq("lambda a, b, c=True, *vararg, d, e='str', **kwargs: a + b")
         eq('lambda x: lambda y: x + y')
         eq('1 if True else 2')
         eq('str or None if int or True else str or bytes or None')