circuitpython/tests/micropython/native_closure.py

47 lines
561 B
Python
Raw Normal View History

# test native emitter can handle closures correctly
2023-02-01 13:38:41 +05:30
# basic closure
@micropython.native
def f():
x = 1
2021-03-15 19:27:36 +05:30
@micropython.native
def g():
nonlocal x
return x
2021-03-15 19:27:36 +05:30
return g
2021-03-15 19:27:36 +05:30
print(f()())
2023-02-01 13:38:41 +05:30
# closing over an argument
@micropython.native
def f(x):
@micropython.native
def g():
nonlocal x
return x
2021-03-15 19:27:36 +05:30
return g
2021-03-15 19:27:36 +05:30
print(f(2)())
2023-02-01 13:38:41 +05:30
# closing over an argument and a normal local
@micropython.native
def f(x):
y = 2 * x
2021-03-15 19:27:36 +05:30
@micropython.native
def g(z):
return x + y + z
2021-03-15 19:27:36 +05:30
return g
2021-03-15 19:27:36 +05:30
print(f(2)(3))