我在Python解释器中运行以下代码:
>>> foo = 10
>>> dir(foo) == dir(10)
True
>>> dir(foo) is dir(10)
False
>>>
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
我正在读取True - False文件中的值,我需要将其转换为布尔值.目前,True即使将值设置为,它也始终将其转换为False.
这MWE是我正在尝试做的事情:
with open('file.dat', mode="r") as f:
for line in f:
reader = line.split()
# Convert to boolean <-- Not working?
flag = bool(reader[0])
if flag:
print 'flag == True'
else:
print 'flag == False'
Run Code Online (Sandbox Code Playgroud)
该file.dat文件基本上由一个带有值的字符串组成True或False写在里面.这种安排看起来非常复杂,因为这是一个来自更大代码的最小例子,这就是我将参数读入其中的方式.
为什么flag总是转换成True?
写不好
if (b == false) //...
while (b != true) //...
Run Code Online (Sandbox Code Playgroud)
是不是总是更好,而不是写:
if (!b) //...
while (!b) //...
Run Code Online (Sandbox Code Playgroud)
据推测,性能没有差异(或者存在?),但是如何衡量两者之间的显性,简洁性,清晰度,可读性等?
为了限制主观性,我还要感谢来自权威编码风格指南的任何引用,这些引用始终是优选的,或者在何时使用.
注意:变量名称b仅用作示例,ala foo和bar.
对于以下示例:
def fuctionName(int, bool):
if int in range(...):
if bool == True:
return False
else:
return True
Run Code Online (Sandbox Code Playgroud)
有没有办法跳过第二个if语句?只是告诉计算机返回布尔值的反面bool?
是否有任何理由不在C++中对"bool"值使用按位运算符&,|和^?
我有时会遇到两个条件中只有一个是真的(XOR)的情况,所以我只是将^运算符抛出到条件表达式中.我有时也希望评估条件的所有部分是否结果是真的(而不是短路),所以我使用&和|.我有时也需要累积布尔值,而且&=和| =非常有用.
这样做时我已经有了一些眉毛,但代码仍然比其他方面更有意义和更清洁.是否有任何理由不将这些用于布尔?是否有任何现代编译器会给出不好的结果?
我正在提交一个show_all带有值的参数true.该值与模型无关.
我的控制器将此参数分配给实例变量:
@show_all = params[:show_all]
Run Code Online (Sandbox Code Playgroud)
然而,@show_all.is_a? String和if @show_all == true总是失败.
Rails解析为布尔值有什么价值?如何明确指定我的参数是布尔值,而不是字符串?
如何在SQL Server中编写文字布尔值?参见样品使用:
select * from SomeTable where PSEUDO_TRUE
Run Code Online (Sandbox Code Playgroud)
另一个样本:
if PSEUDO_TRUE
begin
select 'Hello, SQL!'
end
Run Code Online (Sandbox Code Playgroud)
注意:上面的查询与我将如何使用它无关.它只是测试文字布尔值.
这是我的代码:
#include <cstring>
#include <iostream>
int main() {
bool a;
memset(&a, 0x03, sizeof(bool));
if (a) {
std::cout << "a is true!" << std::endl;
}
if (!a) {
std::cout << "!a is true!" << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
它输出:
a is true!
!a is true!
Run Code Online (Sandbox Code Playgroud)
似乎!运算符bool仅反转最后一位,但每个不相等的值0都被视为true.这导致显示的行为,这在逻辑上是错误的.这是实施中的错误,还是规范允许这样做?请注意,memset可以省略,并且行为可能是相同的,因为a包含内存垃圾.
我正在使用gcc 4.4.5,其他编译器可能会采用不同的方式.
我想完成以下任务
answer = True
myvar = "the answer is " + answer
Run Code Online (Sandbox Code Playgroud)
并且myvar的值是"答案是真的".我很确定你可以用Java做到这一点.
False相当于0并且True是等价的,1因此可以做这样的事情:
def bool_to_str(value):
"""value should be a bool"""
return ['No', 'Yes'][value]
bool_to_str(True)
Run Code Online (Sandbox Code Playgroud)
请注意值是如何bool但是用作int.
这是使用Pythonic还是应该避免?
boolean ×10
python ×5
c++ ×2
string ×2
casting ×1
coding-style ×1
comparison ×1
equality ×1
equals ×1
java ×1
literals ×1
parameters ×1
parsing ×1
sql ×1
sql-server ×1