Python - 是否应该尝试与可选args中的arg类型保持一致?

时间:2016-08-10 16:57:09

标签: python

我的疑问很简单。在使用可选参数时,我是否应该努力与参数类型保持一致?

一个例子:

def example_method(str_arg_1=None):
    if str_arg_1 is not None:
        # do something

我的arg总是str,除非在方法调用中没有传递,所以我不确定在None中使用str_arg_1是否合适这种情况。

我遇到了这个疑问,因为我不知道如何撰写我的文档字符串,str考虑None即使有时TypeError: promise.then is not a function也是如此?

1 个答案:

答案 0 :(得分:4)

名称没有类型;只有它们引用的值才有类型。在这种情况下,文档str_arg_1将引用str对象或None,并解释每个对象的含义是完全正常的。就文档字符串而言,可以肯定地说,如果你声明应该str的论点也可能需要None,那么每个人都会理解你的意思。 / p>

在处理提供静态可检查类型用法的PEP-484中,使用None这一概念不仅可以接受,而且可以满足。

如果str_arg_1 总是是一个字符串,你会将其提示为

def example_method(str_arg_1: str):

如果允许None,则表示使用 union 类型

def example_method(str_arg_1: Union[str, None]):

由于这是一种非常常见的情况,因此有一个快捷方式可以表明:

def example_method(str_arg_1: Optional[str]):

实际上,如果默认值为None,则使用这些类型注释的静态检查程序假定使用Optional,因此以下内容是等效的:

def example_method(str_arg_1: Optional[str] = None):
def example_method(str_arg_1: str = None):