why i cannot pass a tuple to a function (which adress is reference in a dict), i have a error message (missing 1 required positionnal agrument)

Question:

i have the below code : (df_data is a dataframe in this code)

def instr_date(df_data,num):
    return df_data.index[-num]

dict_func = {'instr_date' : instr_date,}
dict_arg = {'instr_date' : (df_data_instr,),}
dict_col_func = {'instr_date' : (1,),}

dict_data = {}
for k,v in dict_col_func.items() :
    dict_data[k]=dict_func[k](dict_arg[k]+v)

This doesn’t work, i have the error message :

TypeError: instr_date() missing 1 required positional argument: 'num'

I tried:

  • dict_funt[k](df_data,1) to check if i have an issue with my tuple (so i pass manually a tuple to the dict_func[k]) and it works!
  • when i do (dict_arg[k]+v) == (df_data,1) the result is "True".

So why i don’t have the same behavior with 2 identical tuple ?
Anyone has an idea to help ?

Asked By: gilhop

||

Answers:

Your function wants two arguments, not a tuple containing the two arguments. But you can expand the tuple in the call. Change:

dict_func[k](dict_arg[k]+v)

to:

dict_func[k](*(dict_arg[k]+v))

This will expand the tuple when forming the argument list in the call.

Answered By: Tom Karzes
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.