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)
答案 0 :(得分:4)
此代码尝试将哈希值转换为颜色;部分计算是错误的。它需要name_hash
的最低24位,将它们分成3个字节,使这些颜色更亮,然后将其输出为字符串。仔细阅读以下各节:
red = name_hash & 0xFF
获取name_hash
的最低有效8位(&
操作为按位AND,0xFF
选择最低8位)。 green
和blue
的行是错误的;他们应该是:
green = (name_hash >> 8) & 0xFF
blue = (name_hash >> 16) & 0xFF
从name_hash
获取每个8位的中高块。 make_light_color
函数执行名称所说的内容:它将颜色值从0更改为255,从170更改为255(170是从0到255的2/3),使其代表较浅的颜色。最后,最后一行将三个单独变量的值转换为字符串。
答案 1 :(得分:0)
你在哪里找到这段代码?
&
是二进制AND
操作,与0xFF
进行AND运算会导致字符中的所有位为2字节字的1。
<<
是左移位操作,它将位向左移动并向右追加0。
0xAA
似乎是执行颜色过渡的一些操作,即修改位值以使颜色变浅。