为了避免明显的错误,我想阻止对某些函数使用位置参数。有没有办法实现这个目标?
答案 0 :(得分:24)
只有Python 3可以正常执行(并且您使用了python3标记,所以没关系):
def function(*, x, y, z):
print(x,y,z)
使用**kwargs
将允许用户输入任何参数,除非您稍后再查看。此外,它将隐藏内省的真实参数名称。
**kwargs
不是这个问题的答案。
测试程序:
>>> function(1,2,3)
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
function(1,2,3)
TypeError: function() takes exactly 0 positional arguments (3 given)
>>> function(x=1, y=2, z=3)
1 2 3
答案 1 :(得分:8)
你可以定义一个装饰器,如果它装饰的函数使用任何位置参数,使用内省会导致错误。这允许您使用某些函数阻止使用位置参数,同时允许您根据需要定义这些函数。
举个例子:
def kwargs_only(f):
def new_f(**kwargs):
return f(**kwargs)
return new_f
使用它:
@kwargs_only
def abc(a, b, c): return a + b + c
你不能这样使用它(输入错误):
abc(1,2,3)
你可以这样使用它:
abc(a=1,b=2,c=3)
更强大的解决方案将使用decorator
模块。
免责声明:无法保证深夜答案!
答案 2 :(得分:2)
是的,只需使用**kwargs
构造,只从那里读取参数。
def my_function(**kwargs):
for key, value in kwargs.iteritems():
print ("%s = %s" % (key, value))
my_function(a="test", b="string")