如何正确使用默认值

2024-06-01 00:21:33 发布

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

给定以下函数:

def httpstatus(self, url, data=None, timeout=None):
    if timeout is None:
        timeout = socket._GLOBAL_DEFAULT_TIMEOUT
    urlopen(url, data, timeout)

timeout参数应该是可选的。但是如果我推荐的话,我想使用socket.\u GLOBAL\u DEFAULT\u TIMEOUT value,如代码所示。但是,该成员是受保护的成员。这似乎不是正确的方法。不同的方法。。。你知道吗

def httpstatus(self, url, data=None, timeout=None):
    if timeout is None:
        urlopen(url, data)
    else:
        urlopen(url, data, timeout)

哎呀,那个更脏了。。。你知道吗

返回到套接字默认超时的正确方法是什么?你知道吗


Tags: 方法selfnonedefaulturldataifis
2条回答

您可以使用^{}-syntax来实现:

def httpstatus(self, url, data=None, timeout=None):
    kwargs = {}
    if timeout is not None:
        kwargs['timeout'] = timeout
    urlopen(url, data, **kwargs)

甚至:

def httpstatus(self, url, data=None, **kwargs):
    # Don't forget to mention in documentation that all
    # extra arguments are passed to urlopen as is.
    urlopen(url, data, **kwargs)

如果您真的不想使用受保护的var,只需从socket中获取数字,并从您获得它的位置进行注释:

# settings
default_timeout = 100 # socket._GLOBAL_DEFAULT_TIMEOUT

另一个选项是将getattr与默认值一起使用:

default_timeout = getattr(socket, '_GLOBAL_DEFAULT_TIMEOUT', 100)

def httpstatus(self, url, data=None, timeout=default_timeout):
    urlopen(url, data, timeout)

相关问题 更多 >