python:是否可以要求函数的参数都是关键字?

时间:2011-10-02 05:53:19

标签: python function coding-style python-3.x

为了避免明显的错误,我想阻止对某些函数使用位置参数。有没有办法实现这个目标?

3 个答案:

答案 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")