是否可以在定义之前在函数中定义默认变量?

时间:2018-04-06 20:12:08

标签: python function variables default

我的代码顶部有这样的东西:

HttpErrorResponse

我得到了这个:

this._transactionResponse

在声明默认变量后,是否必须定义我的函数?这只发生在代码的底部,所以我认为它看起来有点不美观。有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

你不能做你要求的,但你可以做类似的事情。将默认值设置为某个其他 sentinel值,然后在函数中添加一个检查。 None通常是一个不错的选择。

def fun_func(x=None):
    if x is None:
        x = something
    print(x+x)

# lots of lines of code ...

something = 21
fun_func()

这样,something的评估会推迟到实际调用fun_func()

如果None实际上是x的合法值,那么您可能更喜欢这种稍微复杂的方法:

_sentinel = object()
def fun_func(x=_sentinel):
    if x is _sentinel:
        x = something
    print(x+x)

答案 1 :(得分:0)

不(至少不是没有过分“聪明”);问题是“x = something”的行,在达到函数声明时(换句话说,在“编译时”)进行评估。只要在调用 fun_func()之前定义“某事”,说“某事+某事”的行就不是问题。