我的疑问很简单。在使用可选参数时,我是否应该努力与参数类型保持一致?
一个例子:
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
也是如此?
答案 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):