python布尔类型的两个值_布尔人有两个可能的值。是否有三种可能值的类型?
与None并行的问题存在于false=0,true=1,unknown=2(unknown实际上也不是真的,但是如果不小心的话,它将被求值为true)。
我想出了一个老套的办法,至少能得到你想要的东西,我想。它至少可以为您提供在if/else和其他布尔求值实例中以三元方式求值的东西。class Yes(object):
def __nonzero__(self):
return True
class No(object):
def __nonzero__(self):
return False
class Unknown(object):
def __nonzero__(self):
raise ValueError('Unknown typed values do not evaluate to True/False. Try using Ternary.eval().')
class Ternary(object):
def __init__(self, yes, no, unknown):
setattr(self, yes, Yes())
setattr(self, no, No())
setattr(self, unknown, Unknown())
@staticmethod
def eval(value, unknown_eval):
if isinstance(value, Unknown):
return unknown_eval
return bool(value)
用法:t = Ternary('yes', 'no', 'unknown')
# Do stuff to assign ternary value to x
if Ternary.eval(x, True):
print 'x is yes or unknown'
if Ternary.eval(x, False):
print 'x is yes only'
你可以做Yes,No,和未知的伪单子,这可以让你稍微改进eval。当你知道你的值将是yes或no时,你仍然可以进行简单的if检查,但是如果你试图在Unknown上直接执行bool()(即if x),你将得到一个TypeError。这将使您的代码更加明确,因为每次您检查三元类型的值时,您都必须在代码中定义您希望在该条件的上下文中如何处理未知,所以这是一个优点。
编辑:
我想到了另一种方法,这种方法不需要特别的处理,但不太灵活。上翻:class Unknown(object):
def __init__(self, eval):
self._eval = eval
def __nonzero__(self):
return self._eval
class Ternary(object):
def __init__(self, yes, no, unknown, unknown_eval):
setattr(self, yes, Yes())
setattr(self, no, No())
setattr(self, unknown, Unknown(unknown_eval))
用法:t1 = Ternary('yes', 'no', 'unknown', True)
t2 = Ternary('yes', 'no', 'unknown', False)
# Do stuff to assign ternary values to x1 and x2
if x1:
print 'x is yes or unknown'
if x2:
print 'x is yes only'
这样做的好处是允许nonzero在Unknown中作为spec调用工作,但它的缺点是从实例化开始就设置了Unknown的eval,并且不再允许Unknown成为伪单例。
python布尔类型的两个值_布尔人有两个可能的值。是否有三种可能值的类型?相关推荐
- java合并两个数组_「JAVA」两个数组的交集—力扣每日一题(一)
示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] ...
- return两个返回值_异步函数的两个视角
我们来一起看一下两个程序员之间的故事. 以下示例代码是用Scala写的,不过本文所讲的话题并不仅限于Scala,任何有Future/Promise支持的语言都是适用的. 下面这个wiki页面罗列了各个 ...
- matlab求两向量夹角_高考数学解题技巧:专题21 平面向量中最值、范围问题高中数学黄金解题模板...
↑ 点击上方"红色笔记"关注我们 高中各科解题技巧下载 回复数字:800009 高考数学解题技巧:专题24 数列求和方法高中数学黄金解题模板 高考数学解题技巧:专题26 含参不等 ...
- python求两数最大公因数_使用辗转相除法求两个数的最大公因数(python实现)
数学背景: 整除的定义: 任给两个整数a,b,其中b≠0,如果存在一个整数q使得等式 a = bq 成立,我们就说是b整除a,记做b|a. 性质1:如果c|a,c|b,且对于任意的整数m,n,则有c| ...
- python普通年金终值_永续年金与其他年金一样,既有现值又有终值。( )
[单选题]以下代码输出的结果是?( ) while 4 == 4: print('4') [多选题]关于分支结构的描述正确的是( ) [其它]复杂,多个单体 [单选题]迭代输出序列时(如:列表)使用 ...
- 用python计算2+4+6+…+20的值_计算2*3+(2*(5+6)*3)/2+4*6的值
#include#include#include#include#include#include#include using namespacestd;bool isOper(charval) {re ...
- java delete方法返回值_以下选项中,哪个是 File 类 delete() 方法返回值的类型?_JAVA程序设计答案_学小易找答案...
[单选题]72 . 2016年6月5日,甲企业基本生产车间领用材料10 000元,用于生产产品.甲企业应编制的会计分录为 [单选题]安装windows 2008 server的文件是: [单选题]34 ...
- 如何知道react对象的值_基于react怎么获取兄弟元素的对象或它的值?
谢邀. 题主刚学前端的吧,刚用上用react,应该是了解了下DOM然后用起react有这样的疑问.不过没事,慢慢来. 怎么说呢,两个input框在彼此的事件绑定里获取对方的值,在react里是很容易做 ...
- 未能比较数组中的两个元素_算法3 寻找两个正序数组的中序数
问题描述: 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组的中位数.要求设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题. ...
- 用spss做多组两两相关性分析_卡方检验的事后两两比较
卡方检验检出组间差异后,得到的结果只能显示行变量与列变量间是否相互独立,但各变量的不同组别间具体存在何种差异呢?这需要后续通过两两比较来得到更为精确的结论.下面,我将用一个简单的案例向大家演示:在SP ...
最新文章
- 最长不下降子序列(推广问题)
- 良性代码,恶意利用:浅谈 Return-Oriented 攻击
- linux系统md5sum命令用不了,Linux中md5sum命令起什么作用呢?
- 2021年峰峰春晖中学高考成绩查询,峰峰春晖中学2019年录取分数线
- python supervisor 日志_Supervisor使用详解
- (34)FPGA分频设计-奇数分频(第7天)
- 不学网php,php不学框架可以吗
- VS2012全屏背景修改教程
- Bone Collector(hdoj--2602--01背包)
- warning C4995: strcat name was marked as #pragma deprecated
- 自定义View之Layout方法详解
- 【建议收藏】产品经理面试题合集
- python 聊天机器人 中文_ 小智,又一个中文聊天机器人
- PHP查询微信的投诉单列表
- Win10正式版历代记
- Axure RP 9 授权码
- 流行音乐网站 /音乐网站
- Macbook Pro(M1芯片)腾讯会议无法使用共享屏幕功能
- oracle10g驱动怎么安装,oracle10g安装后怎么使用
- 重生之我是赏金猎人-番外篇-记一次层层突破的攻防演练