Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—是否应该尝试与可选参数中的参数类型保持一致?_Python - Fatal编程技术网

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

Python—是否应该尝试与可选参数中的参数类型保持一致?,python,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?名称没有类型;只有它们

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

例如:

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

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


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

如果
str\u arg\u 1
应该始终是一个字符串,那么您会提示它为

def example_method(str_arg_1: str):
如果允许它也为
None
,您可以使用union类型指示它

由于这是一种非常常见的情况,因此有一个快捷方式来指示:

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

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


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

如果
str\u arg\u 1
应该始终是一个字符串,那么您会提示它为

def example_method(str_arg_1: str):
如果允许它也为
None
,您可以使用union类型指示它

由于这是一种非常常见的情况,因此有一个快捷方式来指示:

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

您可以使用(str_arg_1='')然后测试:如果str_arg_1:如果str_arg_1为None,则它将是None类型。不是str类型。你可以用类型(str_arg_1)来验证这一点。看起来你在找吗?@lonewaft谢谢,我不知道存在。无论如何,我没有使用python3.5,所以我在IDE@JacquesdeHooge这可能是错误的或有问题的,因为您无法区分调用方未提供可选参数和显式提供空字符串作为参数的情况。您可以使用(str_arg_1='')然后测试:如果str_arg_1:如果str_arg_1为None,则为None类型。不是str类型。你可以用类型(str_arg_1)来验证这一点。看起来你在找吗?@lonewaft谢谢,我不知道存在。无论如何,我没有使用python3.5,所以我在IDE@JacquesdeHooge这可能是错误的或有问题的,因为您无法区分调用方没有提供可选参数和显式提供空字符串作为参数的情况。