Python是否应该尝试与可选参数中的参数类型保持一致?

2022-05-21 08:25:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

举个例子:

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

我的arg总是str,除非它没有在方法调用中传递,所以我不确定在这种情况下使用None是否是一种好的做法

我之所以产生这个疑问是因为我不知道如何编写docstring,str_arg_1是否考虑str即使有时是None


Tags: none类型参数ifisexampledefargnotdomethodsomething例子str保持一致
1条回答
网友
1楼 ·

名字没有类型;只有它们引用的值才有类型。在这种情况下,记录str_arg_1将引用str对象或None是完全正常的,并解释每一个对象的含义。就docstring而言,如果您声明一个应该str的参数也可能需要None,那么每个人都会理解您的意思


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

如果str_arg_1应该始终是一个字符串,那么您可以将其提示为

def example_method(str_arg_1: str):

如果允许它也是None,那么您可以用一个联合类型指示它

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):