小编net*_*tok的帖子

Python中的链式比较实际上如何工作?

Python的文件进行比较说:

比较可以任意链接,例如,x < y <= z等同于x < y and y <= z,除了y仅评估一次(但在两种情况下z都没有被评估,当x < y发现是假的时).

这些SO问题/答案对这种用法有了更多的了解:

所以像(人为的例子):

if 1 < input("Value:") < 10: print "Is greater than 1 and less than 10"
Run Code Online (Sandbox Code Playgroud)

只要求输入一次.这是有道理的.还有这个:

if 1 < input("Val1:") < 10 < input("Val2:") < 20: print "woo!"
Run Code Online (Sandbox Code Playgroud)

只询问Val2 是否 Val1介于1和10之间,只打印"呜!" 如果 Val2也是10到20之间(证明它们可以'任意链接').这也是有道理的.

但我仍然很好奇这是如何在词法分析器/解析器/编译器(或其他)级别实际实现/解释的.

上面的第一个例子基本上是这样实现的:

x = input("Value:")
1 < x and x < 10: …
Run Code Online (Sandbox Code Playgroud)

python comparison-operators python-internals

9
推荐指数
1
解决办法
533
查看次数

在PostgreSQL中获取表的较大百分比时,为什么位图扫描比索引扫描更快?

位图扫描的作者描述了位图堆扫描和索引扫描之间的区别

一个普通的indexscan一次从索引中获取一个元组指针,然后立即访问表中的该元组。位图扫描一次性从索引中获取所有元组指针,使用内存中的“位图”数据结构对其进行排序,然后以物理元组位置顺序访问表元组。位图扫描提高了表的引用局部性,但要花更多的簿记开销来管理“位图”数据结构---并且不再按索引顺序检索数据,这对您来说无关紧要查询,但是如果您说ORDER BY会很重要。

问题:

  1. 当索引已排序时,为什么又对获取的元组指针进行排序?

  2. 它如何与位图排序?我知道位图是什么,但是我不知道如何将其用于排序。

  3. 为何要获取中等比例的表,为什么它比索引扫描更快?相反,它似乎为该过程增加了很多计算。

postgresql indexing postgresql-performance

5
推荐指数
1
解决办法
82
查看次数