# Nonlocal references ## One level up ```py def f(): x = 1 def g(): reveal_type(x) # revealed: Unknown | Literal[1] ``` ## Two levels up ```py def f(): x = 1 def g(): def h(): reveal_type(x) # revealed: Unknown | Literal[1] ``` ## Skips class scope ```py def f(): x = 1 class C: x = 2 def g(): reveal_type(x) # revealed: Unknown | Literal[1] ``` ## Skips annotation-only assignment ```py def f(): x = 1 def g(): # it's pretty weird to have an annotated assignment in a function where the # name is otherwise not defined; maybe should be an error? x: int def h(): reveal_type(x) # revealed: Unknown | Literal[1] ``` ## Implicit global in function A name reference to a never-defined symbol in a function is implicitly a global lookup. ```py x = 1 def f(): reveal_type(x) # revealed: Unknown | Literal[1] ```