diff --git a/discord/flags.py b/discord/flags.py index 857c94f71e15..af96bfacd457 100644 --- a/discord/flags.py +++ b/discord/flags.py @@ -1567,6 +1567,14 @@ class ArrayFlags(BaseFlags): @classmethod def _from_value(cls: Type[Self], value: List[int]) -> Self: self = cls.__new__(cls) + # This is a micro-optimization given the frequency this object can be created. + # (1).__lshift__ is used in place of lambda x: 1 << x + # prebinding to a method of a constant rather than define a lambda. + # Pairing this with map, is essentially equivalent to (1 << x for x in value) + # reduction using operator.or_ instead of defining a lambda each call + # Discord sends these starting with a value of 1 + # Rather than subtract 1 from each element prior to left shift, + # we shift right by 1 once at the end. self.value = reduce(or_, map((1).__lshift__, value), 0) >> 1 return self