Skip to content

Commit 0f1313e

Browse files
committed
fixes #195
1 parent b23084a commit 0f1313e

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

fastcore/basics.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -237,10 +237,10 @@ def anno_ret(func):
237237
return annotations(func).get('return', None) if func else None
238238

239239
# Cell
240-
def argnames(f):
241-
"Names of arguments to function `f`"
242-
code = f.__code__
243-
return code.co_varnames[:code.co_argcount]
240+
def argnames(f, frame=False):
241+
"Names of arguments to function or frame `f`"
242+
code = getattr(f, 'f_code' if frame else '__code__')
243+
return code.co_varnames[:code.co_argcount+code.co_kwonlyargcount]
244244

245245
# Cell
246246
def with_cast(f):
@@ -271,7 +271,7 @@ def _store_attr(self, anno, **attrs):
271271
def store_attr(names=None, self=None, but='', cast=False, **attrs):
272272
"Store params named in comma-separated `names` from calling context into attrs in `self`"
273273
fr = sys._getframe(1)
274-
args = fr.f_code.co_varnames[:fr.f_code.co_argcount+fr.f_code.co_kwonlyargcount]
274+
args = argnames(fr, True)
275275
if self: args = ('self', *args)
276276
else: self = fr.f_locals[args[0]]
277277
if not hasattr(self, '__stored_args__'): self.__stored_args__ = {}

nbs/01_basics.ipynb

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1391,10 +1391,19 @@
13911391
"outputs": [],
13921392
"source": [
13931393
"#export\n",
1394-
"def argnames(f):\n",
1395-
" \"Names of arguments to function `f`\"\n",
1396-
" code = f.__code__\n",
1397-
" return code.co_varnames[:code.co_argcount]"
1394+
"def argnames(f, frame=False):\n",
1395+
" \"Names of arguments to function or frame `f`\"\n",
1396+
" code = getattr(f, 'f_code' if frame else '__code__')\n",
1397+
" return code.co_varnames[:code.co_argcount+code.co_kwonlyargcount]"
1398+
]
1399+
},
1400+
{
1401+
"cell_type": "code",
1402+
"execution_count": null,
1403+
"metadata": {},
1404+
"outputs": [],
1405+
"source": [
1406+
"test_eq(argnames(f), ['x'])"
13981407
]
13991408
},
14001409
{
@@ -1459,7 +1468,7 @@
14591468
"def store_attr(names=None, self=None, but='', cast=False, **attrs):\n",
14601469
" \"Store params named in comma-separated `names` from calling context into attrs in `self`\"\n",
14611470
" fr = sys._getframe(1)\n",
1462-
" args = fr.f_code.co_varnames[:fr.f_code.co_argcount+fr.f_code.co_kwonlyargcount]\n",
1471+
" args = argnames(fr, True)\n",
14631472
" if self: args = ('self', *args)\n",
14641473
" else: self = fr.f_locals[args[0]]\n",
14651474
" if not hasattr(self, '__stored_args__'): self.__stored_args__ = {}\n",

0 commit comments

Comments
 (0)