Skip to content

Instantly share code, notes, and snippets.

@bilzard
Forked from raven38/noglobal.py
Created November 19, 2022 16:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bilzard/4f48c1e3c90f3e0b1144541e59ce9444 to your computer and use it in GitHub Desktop.
Save bilzard/4f48c1e3c90f3e0b1144541e59ce9444 to your computer and use it in GitHub Desktop.
Useful Noglobal in Python
# License:
# I hereby state this snippet is below "threshold of originality" where applicable (public domain).
#
# Otherwise, since initially posted on Stackoverflow, use as:
# CC-BY-SA 3.0 skyking, Glenn Maynard, Axel Huebl
# http://stackoverflow.com/a/31047259/2719194
# http://stackoverflow.com/a/4858123/2719194
import builtins
import types
def imports():
for name, val in globals().items():
# module imports
if isinstance(val, types.ModuleType):
yield name, val
# functions / callables
if hasattr(val, '__call__'):
yield name, val
def noglobal(f):
return types.FunctionType(f.__code__,
dict(imports()),
f.__name__,
f.__defaults__,
f.__closure__
)
import numpy as np
import matplotlib.pyplot as plt
import h5py
a = 1
@noglobal
def f(b, c=1):
h5py.is_hdf5("a.tmp")
# only np. shall be known, not numpy.
np.arange(4)
# numpy.arrange(4)
# this var access shall break when called
# print(a)
print(b, c)
f(2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment