PYthon:这段代码是如何工作的?

时间:2011-02-20 02:55:00

标签: python

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)

2 个答案:

答案 0 :(得分:4)

此代码尝试将哈希值转换为颜色;部分计算是错误的。它需要name_hash的最低24位,将它们分成3个字节,使这些颜色更亮,然后将其输出为字符串。仔细阅读以下各节:

red = name_hash & 0xFF

获取name_hash的最低有效8位(&操作为按位AND,0xFF选择最低8位)。 greenblue的行是错误的;他们应该是:

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似乎是执行颜色过渡的一些操作,即修改位值以使颜色变浅。