Что означают символы ">>" в коде Python: map(chr,[x,x>>8,y])
Код ошибки, который я получаю в другом файле:
Traceback (most recent call last):
File "C:\Anaconda\lib\site-packages\pyahoolib-0.2-py2.7.egg\yahoo\session.py", line 107, in listener
t.send_pk(consts.SERVICE_AUTHRESP, auth.hash(t.login_id, t.passwd, p[94]))
File "C:\Anaconda\lib\site-packages\pyahoolib-0.2-py2.7.egg\yahoo\auth.py", line 73, in hash
hs = md5.new(mkeystr+"".join(map(chr,[x,x>>8,y]))).digest()
ValueError: chr() arg not in range(256)
ОБНОВЛЕНИЕ: @merlin2011: это меня смущает. код hs = md5.new(mkeystr+"".join(map(chr,[x,x>>8,y]))).digest()
Где у chr запятая. Я думал, что это была функция от doc.python.org: chr(i)
Return a string of one character whose ASCII code is the integer i. For example, chr(97) returns the string 'a'. This is the inverse of ord(). The argument must be in the range [0..255], inclusive; ValueError will be raised if i is outside that range. See also unichr().
Если так, то [x, x >> 8, y] итерируемо для map (), которого я просто еще не узнал?
Кроме того, я не хочу изменять этот код, потому что он является частью файла phhoolib-0.2 auth.py. Но чтобы все заработало, я не знаю, что делать.
2 ответа
Это бинарный оператор с правым сдвигом:
Из Python Wiki:
x >> y
: Возвратx
с битами, сдвинутыми вправоy
мест. Это то же самое, что целочисленное деление (\\)x
от2**y
,
Если вам интересно, сообщение об ошибке означает, что chr
принимает только аргументы внутри диапазона 0
в 256
, и ваш map
функция вызывает его со значением, которое находится за пределами этого диапазона.