lee*_*ezu 14 python python-3.x
考虑带有签名的功能f(a, b)
。将来,我想将签名更改为f(a, *, b)
,不允许b作为位置参数传递。为了减少更改的影响,我想首先弃用指定的b位置,警告用户这样做。
为此,我想写一些类似的东西:
def f(a, b):
frame = inspect.currentframe()
if b in frame.specified_as_positional:
print('Do not do that')
else:
print('Good')
Run Code Online (Sandbox Code Playgroud)
结果将是
>>> f(1, 2)
'Do not do that'
>>> f(1, b=2)
'Good'
Run Code Online (Sandbox Code Playgroud)
inspect.getargvalues(frame)
似乎还不够。ArgInfo对象仅提供
>>> f(1,b=2)
ArgInfo(args=['a', 'b'], varargs=None, keywords=None, locals={'a': 1, 'b': 2})
Run Code Online (Sandbox Code Playgroud)
这样的检查在Python中甚至可能吗?从概念上讲,似乎不需要记住解释器是在位置指定还是作为关键字指定参数。
Python 2支持会很不错,但不是严格要求的。
小智 4
这是一个非常hacky的解决方案:
def f(a, c=None, b=None):
if c is not None:
print("do not do that")
else:
print("good")
Run Code Online (Sandbox Code Playgroud)
f(1, b=2)
输入打印good
并f(1, 2)
打印的地方do not do that
归档时间: |
|
查看次数: |
314 次 |
最近记录: |