如何在python 2.7中将关键字参数转换为命名参数?

时间:2014-02-17 06:43:37

标签: python python-2.7

第一档:

class Profile(object):
   def __init__(self, name, 1st_arg=gst(), 2nd_arg=1, 3rd_arg=AB.parallel):
        self.name = name
        self.gain = 1st_arg(i, o, p)
        self.channel = 2nd_arg
        self.mode = 3rd_arg

第二档:

class A:
   some_function():
     1st_arg = gst(i, o, p) # class gst constructor
     result = Profile(Name, 1st_arg, 2nd_arg=1, 3rd_arg=Phase) # profile class constructor

我有上面的代码,但我想将“1st_arg”从关键字参数更改为命名参数。

这里,2nd_arg和3rd_arg参数清楚地指明了他们的值被分配给谁,但在1st_arg中却不一样。

我想要这个改变,以便如果某个第三方看到了我的代码,那么他就会很容易理解。

2 个答案:

答案 0 :(得分:0)

如果要将位置参数转换为关键字参数(并且它是最后一个关键字参数),只需指定其名称即可。例如,如果您调用以下表单:

f(val1, val2, arg3=val3, arg4=val4)

并且您希望提供val2作为关键字参数,只需将其称为

f(val1, arg2=val2, arg3=val3, arg4=val4)

如果要转换的参数不是最后一个位置参数,则必须将所有后续位置参数转换为关键字参数。

答案 1 :(得分:0)

简单,只需将参数从关键字参数更改为位置参数:

class Profile(object):
   def __init__(self, name, gst, 2nd_arg=1, 3rd_arg=AB.parallel):
        self.name = name
        self.gain = gst(i, o, p)
        self.channel = 2nd_arg
        self.mode = 3rd_arg
但是,有一个更大的问题。在Python中调用方法签名中的函数只能在编译时调用该函数一次。因此,如果您注意到与方法签名中的gst()相关的一些异常行为,那就是原因。如果将函数引用作为参数传递,则可以稍后调用它。不要在方法签名本身中调用gst(),只需将其作为gst传递。

编辑:我认为这就是你所追求的目标

class Profile(object):
   def __init__(self, name, 1st_arg=gst(sane, default, args), 2nd_arg=1, 3rd_arg=AB.parallel):
        self.name = name
        self.gain = 1st_arg
        self.channel = 2nd_arg
        self.mode = 3rd_arg

value = gst(i, o, p)
result = Profile(Name, 1st_arg=value, 2nd_arg=1, 3rd_arg=Phase)