除非有位置引用,否则python args不起作用

标签 python args

<分区>

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)

我回去上课了。

当看起来只有一个值返回时,为什么我必须在这里引用位置?

最佳答案

* 前缀的参数始终是一个元组。它捕获 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)
        )

关于除非有位置引用,否则python args不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34269173/

相关文章:

python - 将相似的模式合并为单一的共识模式

java - 从通过命令行给出的参数创建新对象会导致 UncaughtExceptionhandler 抛出 OutOfMemoryError

java - 打印 args[] 数组的大小 - 越界异常错误

groovy - 你如何将 args 传递给 gmaven groovy :execute?

python - .write() 中的变量后面的字符串部分被放在 Python 中的新行上

python - jenkins 通过请求发布作业 xml 失败并出现异常

python - 根据像素值裁剪 RGB​​ 图像

python - 使用线性回归估计价格

php - wp_parse_args 有什么作用?

java - 如何连接两个命令行参数?