Gerke
Gerke

Reputation: 966

Passing in an array as argument to a function

I am quite new to python and probably facing a very simple problem. However, I was not able to find a solution via Google, as the information I found indicated my method should work.

All I want to do is passing in an array as argument to a function.

The function that shall take an array:

def load(components):
    global status
    global numberOfLoadedPremixables
    results = []
    print('componetnsJson: ', componentsJson, file=sys.stderr)
    status = statusConstants.LOADING

    for x in range(0, len(components)):
        blink(3)
        gramm = components[x]['Gramm']

        #outcome = load(gramm)
        time.sleep(10)
        outcome = 3
        results.append(outcome)
        numberOfLoadedPremixables += 1

    status = statusConstants.LOADING_FINISHED

Then I am trying to start this function on a background thread:

background_thread = threading.Thread(target=load, args=[1,2,3]) #[1,2,3] only for testing
background_thread.start()

As a result, I end up with the error:

TypeError: load() takes 1 positional argument but 3 were given

Upvotes: 2

Views: 251

Answers (1)

rdas
rdas

Reputation: 21275

Since you need to pass the whole array as a single unit to the function, wrap that in a tuple:

background_thread = threading.Thread(target=load, args=([1,2,3],))

The (,) turns the args into a single-element tuple that gets passed to your function

The issue is happening because python expects args to be a sequence which gets unwrapped when being passed to the function, so your function was actually being called like: load(1, 2, 3)

Upvotes: 2

Related Questions