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])
Run Code Online (Sandbox Code Playgroud)
为了参考起见 - args是:
date_year = datetime.now().year
Run Code Online (Sandbox Code Playgroud)
为了使这个查询工作,我需要引用args为
.filter(fixture_datetime__year=args[0])
Run Code Online (Sandbox Code Playgroud)
因为如果我使用
.filter(fixture_datetime__year=args)
Run Code Online (Sandbox Code Playgroud)
我收到错误:
int()参数必须是字符串,类似字节的对象或数字,而不是'元组'
我知道它认为它是一个元组,即使它只是一个值,但是当我在终端中执行以下操作时
type(date_year)
Run Code Online (Sandbox Code Playgroud)
我上课了.
当它看起来只有一个值返回时,为什么我必须在这里引用位置?
-前缀参数始终*是一个元组。它捕获 0 个或多个额外的位置参数。您可以使用 3、20 或 100 个额外参数(超出显式参数)来调用函数,它们都将成为函数中元组的一部分:test_stats()teamargs
>>> def foo(*args): return args
...
>>> foo()
()
>>> foo(42)
(42,)
>>> foo(1, 2, 3)
(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
如果您想要一个可选参数,请将其设为带有哨兵默认值的关键字参数,例如None:
def test_stats(team, optional=None):
if optional is None:
# ...
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=optional)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |