Python判断isogram函数返回generator object的原因解析
问题原因解析
你没写yield却拿到生成器对象的核心原因非常明确:
Python语法规定,外层用圆括号
()包裹的推导式是生成器推导式(Generator Expression),这类表达式本身就会返回惰性求值的生成器对象,完全不需要显式编写yield关键字。
你的代码里return后面的内容正好符合生成器推导式的语法格式:
(True if (string.lower().count(letter) == 1) else False for letter in string.lower())
这行代码本身就是一个生成器,所以函数返回值自然是生成器对象,不可能得到单值布尔结果。
除此之外这段代码还有一层逻辑问题:
- 就算你把外层的圆括号换成方括号
[]拿到列表推导式的结果,也只会得到一个由布尔值组成的序列——序列里的每个布尔值对应遍历到的单个字符在字符串里是否只出现1次,根本不是代表整个字符串无重复字符的单布尔值。比如传入字符串"aba",这个推导式生成的序列是False, True, False,完全无法直接作为isogram判断的返回结果。
内容的提问来源于stack exchange,提问作者felixschmelix
相关产品推荐
相关产品推荐

