python args 不工作,除非它有一个位置参考
python args not working unless it has a position reference
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() argument must be a string, a bytes-like object or a number, not
'tuple'
我知道它认为它是一个元组,即使它只有一个值但是当我在终端中执行以下操作时
type(date_year)
我 class 回来了。
当看起来只有一个值返回时,为什么我必须在这里引用位置?
*
前缀的参数总是一个元组。它捕获 0 个或多个额外的位置参数。您可以使用 3 或 20 或 100 个额外参数调用 test_stats()
函数(超出显式 team
参数),它们都将成为函数中 args
元组的一部分:
>>> def foo(*args): return args
...
>>> foo()
()
>>> foo(42)
(42,)
>>> foo(1, 2, 3)
(1, 2, 3)
如果你想要 一个 可选参数,将其设置为带有标记默认值的关键字参数,例如 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)
)
如果您知道您正在接收日期作为第二个参数,那么请在签名中明确定义它
def test_stats(team, date):
如果你也可以传递一些不同的东西然后使用关键字参数
def test_stats(team, date=None, something_else=None):
*args
仅当您想传递参数序列而不事先创建序列时才应使用
def get_integers(*args):
return args
>>> get_integers(1, 3, 4, 8, 9, 11)
(1, 3, 4, 8, 9, 11)
*args
是元组,**kwargs
是字典。
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() argument must be a string, a bytes-like object or a number, not 'tuple'
我知道它认为它是一个元组,即使它只有一个值但是当我在终端中执行以下操作时
type(date_year)
我 class 回来了。
当看起来只有一个值返回时,为什么我必须在这里引用位置?
*
前缀的参数总是一个元组。它捕获 0 个或多个额外的位置参数。您可以使用 3 或 20 或 100 个额外参数调用 test_stats()
函数(超出显式 team
参数),它们都将成为函数中 args
元组的一部分:
>>> def foo(*args): return args
...
>>> foo()
()
>>> foo(42)
(42,)
>>> foo(1, 2, 3)
(1, 2, 3)
如果你想要 一个 可选参数,将其设置为带有标记默认值的关键字参数,例如 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)
)
如果您知道您正在接收日期作为第二个参数,那么请在签名中明确定义它
def test_stats(team, date):
如果你也可以传递一些不同的东西然后使用关键字参数
def test_stats(team, date=None, something_else=None):
*args
仅当您想传递参数序列而不事先创建序列时才应使用
def get_integers(*args):
return args
>>> get_integers(1, 3, 4, 8, 9, 11)
(1, 3, 4, 8, 9, 11)
*args
是元组,**kwargs
是字典。