Search code examples
python-3.xdefault-value

Python 3: Invalid Syntax Error when using * operator in __init__ between pre-defined values defined in-scope


I am getting a syntax error when trying to do the following MCVE in Python 3.

HEIGHT = 26
WIDTH = 26
OTHERVAR = 5

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

foo_inst = Foo()

Below is the error

  File "a.py", line 6
    def __init__(self, OTHERVAR, HEIGHT*WIDTH):
                                       ^
SyntaxError: invalid syntax

I'm wondering why the multiplication * operator is invalid syntax in this scenario.

If someone could explain why this is bad syntax and offer a potential workaround, that would be great. Thank you.


Solution

  • A function parameter supposes to be a variable, your HEIGHT*WIDTH produces a value, not a variable.

    Are you probably looking for this (default value)?

    >>> 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)
    

    And called by named parameters

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