python - Python 中出现奇怪的语法解析错误?

标签 python syntax-error

我是不是漏掉了什么?为什么“损坏”部分下的代码不能工作?我正在使用 Python 2.6。

#!/usr/bin/env python

def func(a,b,c):
    print a,b,c

#Working: Example #1:

p={'c':3}

func(1,
     b=2,
     c=3,
     )

#Working: Example #2:

func(1,
     b=2,
     **p)

#Broken: Example #3:

func(1,
     b=2,
     **p,
     )

最佳答案

这是来自 grammar 的相关位:

arglist: (argument ',')* (argument [',']
                         |'*' test (',' argument)* [',' '**' test] 
                         |'**' test)

此处的第一行允许在不使用 varargs/kwargs 时在最后一个参数后放置一个逗号(这就是您的第一个示例起作用的原因)。但是,如果指定了 kwargs 参数,则不允许在其后放置逗号,如第二行和第三行所示。

顺便说一下,这里有一个语法显示的有趣的东西:

这些都是合法的:

f(a=1, b=2, c=3,)
f(*v, a=1, b=2, c=3)

但这不是:

f(*v, a=1, b=2, c=3,)

**kwargs 后不允许有逗号是有道理的,因为它必须始终是最后一个参数。我不知道为什么语言设计者选择不允许我的最后一个例子 - 也许是疏忽?

关于python - Python 中出现奇怪的语法解析错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2708614/

相关文章:

Python Logging with a common logger class mixin 和类继承

python - 如何调试 python click cli 应用程序?

python - Django 用户 ID 字段

r - R中的语法问题

python - discord.py 中的多字命令(命令扩展)

python - 使用时间模块时写入 csv 不起作用

python - Python/Django “if statement”语法不正确?

python - Long Int 文字 - 语法无效?

php - Ldap_add(): Invalid Syntax

Matlab:奇怪的尝试访问错误...索引必须是 pos。整数或逻辑