===================================== Identifiers with Greek letters ===================================== ψ1 = β_γ + Ψ_5 --- (module (expression_statement (assignment left: (expression_list (identifier)) right: (expression_list (binary_operator left: (identifier) right: (identifier)))))) ===================================== Subscript expressions ===================================== a[1] b[2, 3] c[4, 5,] --- (module (expression_statement (subscript (identifier) (integer))) (expression_statement (subscript (identifier) (integer) (integer))) (expression_statement (subscript (identifier) (integer) (integer)))) ===================================== Subscript slice expressions ===================================== a[:] b[5:] b[5:6, ...] c[::] --- (module (expression_statement (subscript (identifier) (slice))) (expression_statement (subscript (identifier) (slice (integer)))) (expression_statement (subscript (identifier) (slice (integer) (integer)) (ellipsis))) (expression_statement (subscript (identifier) (slice)))) ===================================== Attribute references ===================================== a.b.c --- (module (expression_statement (attribute (attribute (identifier) (identifier)) (identifier)))) ===================================== Await expressions ===================================== await i(j, 5) return await i(j, 5) --- (module (expression_statement (await (call (identifier) (argument_list (identifier) (integer))))) (return_statement (expression_list (await (call (identifier) (argument_list (identifier) (integer))))))) ===================================== Call expressions ===================================== __a__() b(1) c(e, f=g) i(j, 5,) --- (module (expression_statement (call (identifier) (argument_list))) (expression_statement (call (identifier) (argument_list (integer)))) (expression_statement (call (identifier) (argument_list (identifier) (keyword_argument (identifier) (identifier))))) (expression_statement (call (identifier) (argument_list (identifier) (integer))))) ===================================== Print used as an identifier ===================================== print() print(a) print(a, b=c) print(d, e) print(d, *e) print(*f, **g,) a(print) --- (module (expression_statement (call (identifier) (argument_list))) (expression_statement (call (identifier) (argument_list (identifier)))) (expression_statement (call (identifier) (argument_list (identifier) (keyword_argument (identifier) (identifier))))) (expression_statement (call (identifier) (argument_list (identifier) (identifier)))) (expression_statement (call (identifier) (argument_list (identifier) (list_splat (identifier))))) (expression_statement (call (identifier) (argument_list (list_splat (identifier)) (dictionary_splat (identifier))))) (expression_statement (call (identifier) (argument_list (identifier))))) ===================================== Print used as a parameter ===================================== def a(print): b def a(printer=print): c def a(*print): b def a(**print): b def print(): a --- (module (function_definition (identifier) (parameters (identifier)) (block (expression_statement (identifier)))) (function_definition (identifier) (parameters (default_parameter (identifier) (identifier))) (block (expression_statement (identifier)))) (function_definition (identifier) (parameters (list_splat (identifier))) (block (expression_statement (identifier)))) (function_definition (identifier) (parameters (dictionary_splat (identifier))) (block (expression_statement (identifier)))) (function_definition (identifier) (parameters) (block (expression_statement (identifier))))) ===================================== Exec used as an identifier ===================================== exec("print \"'%s' has %i characters\" % (public_function(), len(public_function()))", {"__builtins__" : None}, safe_dict) exec("""exec _code_ in _globs_, _locs_""") --- (module (expression_statement (call (identifier) (argument_list (string (escape_sequence) (escape_sequence)) (dictionary (pair (string) (none))) (identifier)))) (expression_statement (call (identifier) (argument_list (string))))) ===================================== Calls with splats ===================================== a(*()) a(**{}) a(*b) c(d, *e, **g) --- (module (expression_statement (call (identifier) (argument_list (list_splat (tuple))))) (expression_statement (call (identifier) (argument_list (dictionary_splat (dictionary))))) (expression_statement (call (identifier) (argument_list (list_splat (identifier))))) (expression_statement (call (identifier) (argument_list (identifier) (list_splat (identifier)) (dictionary_splat (identifier)))))) ===================================== Math operators ===================================== a + b * c ** d - e / 5 -5 +x ~x --- (module (expression_statement (binary_operator (binary_operator (identifier) (binary_operator (identifier) (binary_operator (identifier) (identifier)))) (binary_operator (identifier) (integer)))) (expression_statement (unary_operator (integer))) (expression_statement (unary_operator (identifier))) (expression_statement (unary_operator (identifier)))) ===================================== Binary Addition / Subtraction With Floats ===================================== .1-.0 .1+.0 .1-0 .1+0 1-.0 1+.0 --- (module (expression_statement (binary_operator (float) (float))) (expression_statement (binary_operator (float) (float))) (expression_statement (binary_operator (float) (integer))) (expression_statement (binary_operator (float) (integer))) (expression_statement (binary_operator (integer) (float))) (expression_statement (binary_operator (integer) (float)))) ===================================== Power Operator Precedence ===================================== 2**2**3 -2**2 --- (module (expression_statement (binary_operator (integer) (binary_operator (integer) (integer)))) (expression_statement (unary_operator (binary_operator (integer) (integer))))) ===================================== Bitwise operators ===================================== a << b | c >> d & e --- (module (expression_statement (binary_operator (binary_operator (identifier) (identifier)) (binary_operator (binary_operator (identifier) (identifier)) (identifier))))) ===================================== Boolean operators ===================================== a or b and c not d --- (module (expression_statement (boolean_operator (identifier) (boolean_operator (identifier) (identifier)))) (expression_statement (not_operator (identifier)))) ===================================== Comparison operators ===================================== a < b <= c == d >= e > f not a == b or c == d --- (module (expression_statement (comparison_operator (identifier) (identifier) (identifier) (identifier) (identifier) (identifier))) (expression_statement (not_operator (boolean_operator (comparison_operator (identifier) (identifier)) (comparison_operator (identifier) (identifier)))))) ==================================================== Assignments ==================================================== a = 1 a, b = 1, 2 a, = 1, 2 a[b] = c = d --- (module (expression_statement (assignment (expression_list (identifier)) (expression_list (integer)))) (expression_statement (assignment (expression_list (identifier) (identifier)) (expression_list (integer) (integer)))) (expression_statement (assignment (expression_list (identifier)) (expression_list (integer) (integer)))) (expression_statement (assignment (expression_list (subscript (identifier) (identifier))) (assignment (expression_list (identifier)) (expression_list (identifier)))))) ==================================================== Assignments with type annotations ==================================================== tail_leaves: List[Leaf] = [] --- (module (expression_statement (assignment (expression_list (identifier)) (type (subscript (identifier) (identifier))) (expression_list (list))))) ==================================================== Augmented assignments ==================================================== a += 1 b >>= 2 c //= 1 --- (module (expression_statement (augmented_assignment (expression_list (identifier)) (expression_list (integer)))) (expression_statement (augmented_assignment (expression_list (identifier)) (expression_list (integer)))) (expression_statement (augmented_assignment (expression_list (identifier)) (expression_list (integer))))) ==================================================== Named expressions ==================================================== a := x (y := f(x)) foo(x=(y := f(x))) y0 = (y1 := f(x)) def foo(answer=(p := 42)): return answer; def foo(answer: (p := 42) = 5): return answer; foo(x := 3, cat='vector') (z := (y := (x := 0))) --- (module (expression_statement (named_expression (identifier) (identifier))) (expression_statement (parenthesized_expression (named_expression (identifier) (call (identifier) (argument_list (identifier)))))) (expression_statement (call (identifier) (argument_list (keyword_argument (identifier) (parenthesized_expression (named_expression (identifier) (call (identifier) (argument_list (identifier))))))))) (expression_statement (assignment (expression_list (identifier)) (expression_list (parenthesized_expression (named_expression (identifier) (call (identifier) (argument_list (identifier)))))))) (function_definition (identifier) (parameters (default_parameter (identifier) (parenthesized_expression (named_expression (identifier) (integer))))) (block (return_statement (expression_list (identifier))))) (function_definition (identifier) (parameters (typed_default_parameter (identifier) (type (parenthesized_expression (named_expression (identifier) (integer)))) (integer))) (block (return_statement (expression_list (identifier))))) (expression_statement (call (identifier) (argument_list (named_expression (identifier) (integer)) (keyword_argument (identifier) (string))))) (expression_statement (parenthesized_expression (named_expression (identifier) (parenthesized_expression (named_expression (identifier) (parenthesized_expression (named_expression (identifier) (integer))))))))) ==================================================== Yield expressions ==================================================== def example(): yield yield 1 x = yield 2 yield from a yield from (yield from (x for x in range(1, 10))) --- (module (function_definition (identifier) (parameters) (block (expression_statement (yield)) (expression_statement (yield (expression_list (integer)))) (expression_statement (assignment (expression_list (identifier)) (yield (expression_list (integer))))) (expression_statement (yield (identifier))) (expression_statement (yield (parenthesized_expression (yield (generator_expression (identifier) (for_in_clause (variables (identifier)) (call (identifier) (argument_list (integer) (integer)))))))))))) ==================================================== lambdas ==================================================== lambda b, c: d("e" % f) lambda: True lambda a, b = c, *d, **e: a lambda (a,b): (a, b) --- (module (expression_statement (lambda (lambda_parameters (identifier) (identifier)) (call (identifier) (argument_list (binary_operator (string) (identifier)))))) (expression_statement (lambda (true))) (expression_statement (lambda (lambda_parameters (identifier) (default_parameter (identifier) (identifier)) (list_splat (identifier)) (dictionary_splat (identifier))) (identifier))) (expression_statement (lambda (lambda_parameters (tuple (identifier) (identifier))) (tuple (identifier) (identifier))))) ===================================== Conditional if expressions ===================================== a = b if c else d something() if a else d slice(1,1,1) if a else d --- (module (expression_statement (assignment (expression_list (identifier)) (expression_list (conditional_expression (identifier) (identifier) (identifier))))) (expression_statement (conditional_expression (call (identifier) (argument_list)) (identifier) (identifier))) (expression_statement (conditional_expression (call (identifier) (argument_list (integer) (integer) (integer))) (identifier) (identifier)))) ======================================== Async context managers and iterators ======================================== async with a as b: async for c in d: [e async for f in g] --- (module (with_statement (with_item (identifier) (identifier)) (block (for_statement (variables (identifier)) (expression_list (identifier)) (block (expression_statement (list_comprehension (identifier) (for_in_clause (variables (identifier)) (identifier)))))))))