将参数设置为可选

时间:2014-01-26 18:17:59

标签: python arguments

在Python中是否有办法将参数设置为可选(忽略它就好像它不存在一样)?

我的意思是,假设你有一个类:

class RandomClass():

    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z

    def __str__(self):
        return str(self.lst())

    def lst(self):
        return [self.x, self.y, self.z]

你尝试运行它:

r1 = RandomClass(1,2,3)
r1.lst()
[1, 2, 3]
print(r1)
[1, 2, 3]

这是有效的,但如果您尝试类似:r1 = RandomClass(1,2),它将会失败。

因此,如果设置参数是可选的,那么这些应该可以正常工作:

r1 = RandomClass(1,2)
r1 = RandomClass(1,2,3)

示例(假设z设置为可选)然后:

   r1 = RandomClass(1,2)
   r1.lst()
   [1, 2, None]
   print(r1)
   [1, 2, None]

如果没有使用,我将可选参数设置为None,但它可以是任何东西,如0,2等,以识别未使用的。

你认为这甚至可能吗?

2 个答案:

答案 0 :(得分:2)

您可以将默认值设置为参数。在这种情况下,您希望用户可以提供或不提供z。因此,如果用户为构造函数提供了2个参数,则可以将其默认值设置为None

class RandomClass(object):
    def __init__(self, x, y, z=None):
        self.x = x
        self.y = y
        self.z = z  # here, z will be None if only 2 arguments are passed

    # other methods...


[...]
>>> r1 = RandomClass(1,2)
>>> r1.lst()
[1, 2, None]

确保可选参数始终位于参数列表的末尾(不可能编写类似__init__(self, x=None, y, z)的内容)。我建议您阅读本教程:Using Optional and Named Arguments,来自http://www.diveintopython.net/

答案 1 :(得分:0)

这是一个示例方法,一个带有两个可选参数的函数:

def method(noDefault, arg1=10, arg2=1):

“arg1”“arg2” 是可选的,因为它们定义了默认值

“noDefault”是必需的,因为它有无默认值

如果“method” 仅使用一个参数进行调用,则会发生以下情况: arg1默认为10
arg2默认为1

如果使用两个参数调用方法 ,则 arg2仍然默认为1.