Created
February 11, 2025 19:56
-
-
Save dcreager/2729a6f9cf3302321e8d1df8d48a29ee to your computer and use it in GitHub Desktop.
Nested eager/lazy scopes in Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
x = [1] | |
a = [a for a in x] | |
print("eager", a) # eager [1] | |
x = [2] | |
print("eager", a) # eager [1] | |
x = [1] | |
def f(): | |
return list(x) | |
print("lazy", f()) # lazy [1] | |
x = [2] | |
print("lazy", f()) # lazy [2] | |
x = [1] | |
class A: | |
a = list(x) | |
print("eager", A.a) # eager [1] | |
x = [2] | |
print("eager", A.a) # eager [1] | |
x = [1] | |
class A: | |
def f(): | |
return list(x) | |
print("lazy in eager -> lazy", A.f()) # lazy in eager -> lazy [1] | |
x = [2] | |
print("lazy in eager -> lazy", A.f()) # lazy in eager -> lazy [2] | |
x = [1] | |
def f(): | |
return [a for a in x] | |
print("eager in lazy -> lazy", f()) # eager in lazy -> lazy [1] | |
x = [2] | |
print("eager in lazy -> lazy", f()) # eager in lazy -> lazy [2] | |
x = [1] | |
class A: | |
a = [a for a in x] | |
print("eager in eager -> eager", A.a) # eager in eager -> eager [1] | |
x = [2] | |
print("eager in eager -> eager", A.a) # eager in eager -> eager [1] | |
x = [1] | |
def f(): | |
def g(): | |
return list(x) | |
return g | |
print("lazy in lazy -> lazy", f()()) # lazy in lazy -> lazy [1] | |
x = [2] | |
print("lazy in lazy -> lazy", f()()) # lazy in lazy -> lazy [2] | |
x = [1] | |
class A: | |
def f(): | |
return [a for a in x] | |
print("eager in lazy in eager -> lazy", A.f()) # eager in lazy in eager -> lazy [1] | |
x = [2] | |
print("eager in lazy in eager -> lazy", A.f()) # eager in lazy in eager -> lazy [2] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment