Python 3.x Python 3:在范围中定义的预定义值之间使用_init_uuuu中的*运算符时出现无效语法错误

Python 3.x Python 3:在范围中定义的预定义值之间使用_init_uuuu中的*运算符时出现无效语法错误,python-3.x,default-value,Python 3.x,Default Value,我在Python3中尝试执行以下MCVE时遇到语法错误 HEIGHT = 26 WIDTH = 26 OTHERVAR = 5 class Foo(): def __init__(self, OTHERVAR, HEIGHT*WIDTH): print (str(OTHERVAR + HEIGHT*WIDTH)) foo_inst = Foo() 下面是错误 File "a.py", line 6 def __init__(self, OTHERVAR,

我在Python3中尝试执行以下MCVE时遇到语法错误

HEIGHT = 26
WIDTH = 26
OTHERVAR = 5

class Foo():
    def __init__(self, OTHERVAR, HEIGHT*WIDTH):
        print (str(OTHERVAR + HEIGHT*WIDTH))

foo_inst = Foo()
下面是错误

  File "a.py", line 6
    def __init__(self, OTHERVAR, HEIGHT*WIDTH):
                                       ^
SyntaxError: invalid syntax
我想知道为什么乘法*运算符在这种情况下是无效的语法


如果有人能解释为什么这是糟糕的语法,并提供一个潜在的解决方法,那就太好了。谢谢。

函数参数假设是一个变量,您的高度*宽度产生一个值,而不是一个变量

您可能正在寻找这个(默认值)吗


你期望
def\uuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuoself,HEIGHT*WIDTH)
是什么意思?鉴于你已经标记了问题
[默认值]
显然你的意思是
def\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。在完整的示例中,类外定义的其他常量以类似的方式传入,因此我在查看完整示例时的假设是,在实例化类时,通过定义常量并将常量作为参数传递给
\uuuu init\uuu
,预设值可以在
\uuuu init\uuuu
@mkrieger1中使用。区域示例是我希望用于默认值的示例,但问题中的语法是由一位教授作为作业的一部分提供的。然后他们可能犯了错误,你应该询问他们。不可能将默认值和其他直接传递的参数,因为python抱怨我为一个参数定义了默认值,而不是为其他参数定义了默认值。您只需要对参数重新排序,使具有默认值的参数排在最后。
>>> a = 1
>>> b = 2
>>> def test(c=a*b):
...     print(c)
... 
>>> test()
2

>>> def test(c=a*b, d):
...     print(c, d)
... 
  File "<stdin>", line 1
SyntaxError: non-default argument follows default argument

>>> def test(d, c=a*b):
...     print(d, c)
... 
>>> test(10)
(10, 2)
>>> def test(d, c=a*b, e=20):
...     print(d, c, e)
... 
>>> test(10, e=30)
(10, 2, 30)