这个问题在这里已有答案:
def test_stats(team, *args):
if not args:
[do some stuff]
else:
team_fixtures = (Fixtures.objects.filter(home_team=team_details.id) | Fixtures.objects.filter(away_team=team_details.id))/
.filter(fixture_datetime__lt=datetime.now()).filter(fixture_datetime__year=args[0])
为了参考起见 - args是:
date_year = datetime.now().year
为了使这个查询工作,我需要引用args为
.filter(fixture_datetime__year=args[0])
因为如果我使用
.filter(fixture_datetime__year=args)
我收到错误:
int()参数必须是字符串,类似字节的对象或数字,而不是'元组'
我知道它认为它是一个元组,即使它只是一个值,但是当我在终端中执行以下操作时
type(date_year)
我上课了 .
当它看起来只有一个值返回时,为什么我必须在这里引用位置?
2 回答
*
-prefixed参数是 always 元组 . 它捕获0个或多个额外的位置参数 . 您可以使用3或20或100个额外参数调用test_stats()
函数(超出显式team
参数),它们都将成为函数中args
元组的一部分:如果您想要一个可选参数,请将其设为带有标记默认值的关键字参数,如
None
:如果您知道您将日期作为第二个参数接收,则在签名中明确定义它
如果你也可以传递不同的东西,那么使用关键字参数
仅当您想要传递参数序列而不事先创建序列时,才应使用
*args
*args
是一个元组,**kwargs
是一个字典 .