Python:处理None参数

时间:2014-05-29 14:11:41

标签: python

最佳做法是什么? 1)有一个功能可以接受无?
2)练习不向函数发送无

这只是个人偏好还是有任何利弊?

我有一个功能

def parse_path(path):
    site = None

    site_pattern = re.compile('(fl|ny|wa|tx)')
    match = site_pattern.search(path)
    if match:
        site = match.group(0)

    return site

很明显,如果我将无法传递给parse_path,它会抱怨 TypeError:期望的字符串或缓冲区

所以我应该总是意识到要投入到功能中的内容,还是应该灵活一点,以便处理无?

1 个答案:

答案 0 :(得分:2)

我有时使用None默认为:

def dosomething(input1, input2=None):

    if not input2:
        input2 = compute_default_input2

    carry_on()
    ....

这在可以以多种方式使用的类或某些属性需要计算密集的初始化时非常有用,因此除非请求,否则您不希望这样做 - 默认情况下添加None可以实现这一点。 它也是一种允许用户覆盖对象属性的廉价方法:

def dosomething(self, property=None):

    if not property:
        property = self.property

默认情况下,这将使用self.*值,但允许用户覆盖它。 它也是一种破解,因为Python中的大多数东西都应该小心使用。

...除此之外:我认为None作为输入应该只在一个函数中处理,如果有一个合理的用例,None被传递给该函数,那非常多取决于它正在运行的环境。如果你可以合理地期望每个人都知道他们不应该使用None调用你的函数,那么来自Python的标准错误消息应该足以清楚问题是什么。