Storing lambdas in a dictionary
Question:
I have been trying to create a dictionary with a string for each key and a lambda function for each value. I am not sure where I am going wrong but I suspect it is either my attempt to store a lambda in a dictionary in the first place, or the fact that my lambda is using a shortcut operator.
Code:
dict = {
'Applied_poison_rating_bonus':
(lambda target, magnitude: target.equipmentPoisonRatingBonus += magnitude)
}
The error being raised is SyntaxError: invalid syntax
and pointing right at my +=
. Are shortcut operators not allowed in lambdas, or am I even farther off track than I thought?
For the sake of sanity, I have omitted hundreds of very similar pairs (It isn’t just a tiny dictionary.)
EDIT:
It seems my issue was with trying to assign anything within a lambda expression. Howver, my issue to solve is thus how can I get a method that only knows the key to this dictionary to be able to alter that field defined in my (broken) code?
Would some manner of call to eval() help?
EDIT_FINAL:
The functools.partial() method was recommended to this extended part of the question, and I believe after researching it, I will find it sufficient to solve my problem.
Answers:
You cannot use assignments in a expression, and a lambda
only takes an expression.
You can store lambdas in dictionaries just fine otherwise:
dict = {'Applied_poison_rating_bonus' : (lambda target, magnitude: target.equipmentPoisonRatingBonus + magnitude)}
The above lambda
of course only returns the result, it won’t alter target.equimentPoisonRatingBonus
in-place.
I have been trying to create a dictionary with a string for each key and a lambda function for each value. I am not sure where I am going wrong but I suspect it is either my attempt to store a lambda in a dictionary in the first place, or the fact that my lambda is using a shortcut operator.
Code:
dict = {
'Applied_poison_rating_bonus':
(lambda target, magnitude: target.equipmentPoisonRatingBonus += magnitude)
}
The error being raised is SyntaxError: invalid syntax
and pointing right at my +=
. Are shortcut operators not allowed in lambdas, or am I even farther off track than I thought?
For the sake of sanity, I have omitted hundreds of very similar pairs (It isn’t just a tiny dictionary.)
EDIT:
It seems my issue was with trying to assign anything within a lambda expression. Howver, my issue to solve is thus how can I get a method that only knows the key to this dictionary to be able to alter that field defined in my (broken) code?
Would some manner of call to eval() help?
EDIT_FINAL:
The functools.partial() method was recommended to this extended part of the question, and I believe after researching it, I will find it sufficient to solve my problem.
You cannot use assignments in a expression, and a lambda
only takes an expression.
You can store lambdas in dictionaries just fine otherwise:
dict = {'Applied_poison_rating_bonus' : (lambda target, magnitude: target.equipmentPoisonRatingBonus + magnitude)}
The above lambda
of course only returns the result, it won’t alter target.equimentPoisonRatingBonus
in-place.