Python的Bool操作符--奇怪的逻辑但很有用

经常看到下面代码:

1
user_name = form['username'] or 'unknown'

一般来说,or操作符应该返回 bool类型。也就是说,上文代码的user_name 应该是 True 或者 False

php/perl用这种代码多的是,我能理解:

1
foo(bar) or die;

问题是,php/perl不能这么赋值啊……

python的这个逻辑还真挺诡异的……(是的,这种感慨一般来自c/c++程序员,我们较真)。

今日,又看到了类似代码。nnd,查查看。

于是,我得到了这个:

(Note that neither “and” nor “or” restrict the value and type they
return to “False” and “True”, but rather return the last evaluated
argument. This is sometimes useful, e.g., if “s” is a string that
should be replaced by a default value if it is empty, the expression
“s or ‘foo’” yields the desired value. Because “not” has to invent a
value anyway, it does not bother to return a value of the same type as
its argument, so e.g., “not ‘foo’” yields “False”, not “‘’”.)

确实灵活了,也符合人的第一感觉。但是……nnd,一个判断把类型换了到底是什么鬼啊……

不过,话说回来,用的时候……真香……虽然是今日查的,但是我已经用了N久了

就这样,水这么一贴是因为刚刚从半死不活的coding中换了blog服务器。测试下。