【问题标题】:Error in python asterisk syntax. No idea what is wrongpython星号语法错误。不知道出了什么问题
【发布时间】:2020-03-16 12:20:31
【问题描述】:

我正在尝试使用scipy.optimize.minimize 在本地最小化一个复杂的函数。由于我需要良好的梯度才能顺利执行局部优化,但函数非常复杂,以便手动编写导数,我决定使用Autoptim 作为中间人来处理我的使用自动微分包Autograd进行优化以获得梯度。

在我安装了包(以及 Autograd)之后,我打开了我的 python 终端以运行一些初步测试,以检查 scipy、autograd 和 autoptim 之间的安装和包集成是否顺利。然后,Autooptim 在导入时立即引发错误(在import autoptim 行)。由于解释器给出了引发的所有异常堆栈,因此我进入了更深层,看看是哪一行启动了停止解释器的级联。

我找到的行是autoptim.py的第88行:

87. optim_vars = _convert_to_tuple(optim_vars)
88. precon_optim_vars = precon_fwd(*optim_vars,*args)
89. n_args = len(args)

Python 解释器引发了无效语法异常,这意味着该行中的某些内容不是“用 Python”编写的。我检查了是否有一些未闭合的括号,但事实并非如此。我正在使用 Python 3,所以我认为那行中的某些内容可能是用 Python 2 语法编写的,并且它为 Python 3 解释器注册了错误,但据我了解,两个版本之间的差异非常小并且有一些(尽管不完整)两者之间的追溯兼容性。

那是什么?我在这里错过了什么?

那行有什么问题?

这是python解释器中导入行的回溯

>>> import autoptim
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.4/dist-packages/autoptim/__init__.py", line 6, in <module>
    from .autoptim import minimize  # noqa
  File "/usr/local/lib/python3.4/dist-packages/autoptim/autoptim.py", line 95
    return objective_function(*optim_vars, *args)
                                           ^
SyntaxError: invalid syntax

【问题讨论】:

  • 是否定义了argsprecon_fwd 的签名是什么?
  • 您确定确定您正在使用 Python 3 运行此代码吗?与您的猜测相反:Python 2 无法识别函数调用中重复使用 * 参数。
  • @ScottHunter Args 是一个元组,定义为 Autoptim 的“最小化”函数的参数之一,该函数包含该行。 “签名”是什么意思?
  • @chepner 是的,我很肯定我正在使用 Python3 来运行代码。
  • 啊,你的 Python 3 版本不够新。

标签: python python-3.x syntax


【解决方案1】:

直到 Python 3.5 才引入所使用的语法(请参阅 PEP 448)。您正在使用 Python 3.4。

作为一种解决方法,您可以显式构建所需的列表以进行解包:

return objective_function(*list(optim_vars + args))

【讨论】:

  • 有没有办法为 python 3.4 重写该行?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
  • 2015-04-14
相关资源
最近更新 更多