gpt4 book ai didi

python - 函数参数的值既不是调用者传入的也不是默认值

转载 作者:太空宇宙 更新时间:2023-11-04 09:16:50 24 4
gpt4 key购买 nike

我有一个这样的装饰器:

def region_required(view_func):
def new_view(request, ctx = {}, *args, **kw):
import pdb; pdb.set_trace()
ctx['regions'] = Region.objects.all()
return view_func(request, context=ctx, *args, **kw)
return new_view

我用它来装饰 View 函数。

今天我注意到一些非常奇怪的事情,ctx(上下文)参数有时包含属于最后一个 HTTP 请求的数据。然后我将范围缩小到这个装饰器,发现 ctx 在本应为 {} 的地方以某种方式具有值(value)。

所以我设置了一个断点,并向上移动了一层,然后我发现它的调用者根本没有传递任何东西给它。

参数怎么可能有既不是调用者传入的值也不是默认值的值?

最佳答案

您正在使用可变参数作为默认参数。每次在没有该参数的情况下调用它时,它将包含您提供的参数,包括之前的修改。使用 None 作为默认值,检查它,如果它是 None,则在函数体中分配空字典。

def region_required(view_func):
def new_view(request, ctx=None, *args, **kw):
if ctx is None:
ctx = {}
import pdb; pdb.set_trace()
ctx['regions'] = Region.objects.all()
return view_func(request, context=ctx, *args, **kw)
return new_view

关于python - 函数参数的值既不是调用者传入的也不是默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8317532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com