Reputation: 51211
def color(self):
name_hash = hash(self.name)
red = name_hash & 0xFF # What is this sort of operation?
green = (name_hash << 0xFF) & 0xFF # What does 0xFF used for?
blue = (name_hash << 0xFFFF) & 0xFF
make_light_color = lambda x: x / 3 + 0xAA # Why plux 0xAA?
red = make_light_color(red)
green = make_light_color(green)
blue = make_light_color(blue)
return 'rgb(%s,%s,%s)' % (red, green, blue)
Upvotes: 3
Views: 464
Reputation: 56813
Where did you find this code?
&
is the binary AND
operation, ANDing with 0xFF
would result in all the bits in your character which are 1 for the 2 byte word.
<<
is the left shift operation, which would move the bits towards left and append 0's to the right.
0xAA
seems to be some operation to perform a color transition, that is modify the bit values to make the color light.Upvotes: 0
Reputation: 30969
This code is trying to convert a hash value to a color; parts of the computation are buggy. It takes the lowest 24 bits of name_hash
, splits them into 3 bytes, makes those colors lighter, and then outputs that as a string. Going through the sections:
red = name_hash & 0xFF
Gets the least significant 8 bits of name_hash
(the &
operation is bitwise AND, and 0xFF
selects the lowest 8 bits). The lines for green
and blue
are buggy; they should be:
green = (name_hash >> 8) & 0xFF
blue = (name_hash >> 16) & 0xFF
to get the middle and high blocks of 8 bits each from name_hash
. The make_light_color
function does what the name says: it changes a color value from 0 to 255 into one from 170 to 255 (170 is 2/3 of the way from 0 to 255) to make it represent a lighter color. Finally, the last line converts the values of the three separate variables into a string.
Upvotes: 4