【发布时间】:2017-12-30 01:25:20
【问题描述】:
基本上是这样的:
DEFAULT_TIMEOUT = 10
# or even: from my_settings import DEFAULT_TIMEOUT
def get_google(timeout=DEFAULT_TIMEOUT):
return requests.get('google.com', timeout=timeout)
我认为只要常数真的保持不变,这应该可以正常工作。然而我有时会看到这样的模式:
DEFAULT_TIMEOUT = 10
def get_google(timeout=None):
if timeout is None:
timeout = DEFAULT_TIMEOUT
return requests.get('google.com', timeout=timeout)
这些是等价的还是我应该更喜欢其中一个?
【问题讨论】:
-
你能举例说明你在哪里看到第二种模式吗?
-
@BrenBarn 从我的脑海中,不,但我已经经常看到它,将它作为一种方法来记忆。
-
第二个模式在默认值是可变的时候更有用,比如
[]。对于不可变类型(例如数字),您应该可以直接使用它们 -
第二个例子不允许
0超时 -
@mxgx:正如 Paul Panzer 的评论所说,这种模式在不同的情况下更常见,这就是我问的原因。我很好奇的是,您是否特别看到有人使用 default-None-then-if-inside-function together 并将模块级常量作为默认值,或者您是否已经刚刚分别看到了这两件事。
标签: python function function-parameter