Skip to content

Instantly share code, notes, and snippets.

@cppio
Created October 15, 2025 04:08
Show Gist options
  • Select an option

  • Save cppio/2fec748d8495e81203962450affdeb16 to your computer and use it in GitHub Desktop.

Select an option

Save cppio/2fec748d8495e81203962450affdeb16 to your computer and use it in GitHub Desktop.
def sig(fn):
code = fn.__code__
defaults = fn.__defaults__
kwdefaults = fn.__kwdefaults__
if defaults is None:
defaults = ()
if kwdefaults is None:
kwdefaults = {}
pos, varnames = code.co_varnames[:code.co_argcount], code.co_varnames[code.co_argcount:]
pos_only, pos_or_kw = pos[:code.co_posonlyargcount], pos[code.co_posonlyargcount:]
kw_only, varnames = varnames[:code.co_kwonlyargcount], varnames[code.co_kwonlyargcount:]
if code.co_flags & 4:
var_pos, varnames = varnames[0], varnames[1:]
else:
var_pos = None
if code.co_flags & 8:
var_kw = varnames[0]
else:
var_kw = None
pieces = []
idx = len(defaults) - code.co_argcount
for arg in pos_only:
if idx >= 0:
pieces.append(f"{arg}={defaults[idx]!r}")
else:
pieces.append(arg)
idx += 1
if pos_only:
pieces.append("/")
for arg in pos_or_kw:
if idx >= 0:
pieces.append(f"{arg}={defaults[idx]!r}")
else:
pieces.append(arg)
idx += 1
if var_pos is not None:
pieces.append(f"*{var_pos}")
elif kw_only:
pieces.append("*")
for kwarg in kw_only:
if kwarg in kwdefaults:
pieces.append(f"{kwarg}={kwdefaults[kwarg]!r}")
else:
pieces.append(kwarg)
if var_kw is not None:
pieces.append(f"**{var_kw}")
return ", ".join(pieces)
if __name__ == "__main__":
import inspect
tests = [
", ".join([*pos_only, *pos_or_kw, *var_pos, *kw_only, *var_kw])
for var_kw in [[], ["**h"]]
for kw_only in [[], ["f", "g"], ["f", "g='g'"], ["f='f'", "g"], ["f='f'", "g='g'"]]
for var_pos in [["*"] if kw_only else [], ["*e"]]
for pos_or_kw in [[], ["c", "d"], ["c", "d='d'"], ["c='c'", "d='d'"]]
for pos_only in [[], ["a", "b", "/"], *([["a", "b='b'", "/"], ["a='a'", "b='b'", "/"]] if "c='c'" in pos_or_kw else [])]
]
for test in tests:
fn = eval(f"lambda {test}: ...")
assert inspect.signature(fn).format() == f"({test})"
assert sig(fn) == test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment