我总是误以为输入原始字母(alphabet = "abcdefghijklmnopqrstuvwxyz"
)的时间比我想象的要短:
alphabet = list(chr(i) for i in range(ord('a'), ord('z') + 1))
当然,您也可以from string import ascii_lowercase
,但这与问题无关。为什么字符无效输入range
函数?以下代码有效,证明range
可以使用实现__index__
函数的任何值:
class Doubler(object):
def __init__(self, value):
self.value = value * 2
def __int__(self):
return self.value
__index__ = __int__
for i in range(Doubler(5), Doubler(10)):
print(i)
[10,20]是逐行打印的,这意味着它显然有效。那么为什么字符不会从ord
函数返回__index__
?显然,对于长度超过长度1的字符串,这不起作用,但ord
也不行。我有什么理由在这里失踪吗?我们可以range('a', 'z' + 1)
,这是更清晰的IMO。
答案 0 :(得分:0)
因为' a'和' z'是字符串,为什么他们应该使用第一个符号的ord作为__index__
?另请注意,抽象字符串可以为空。