与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布尔类型的两个值_布尔人有两个可能的值。是否有三种可能值的类型?相关推荐

  1. java合并两个数组_「JAVA」两个数组的交集—力扣每日一题(一)

    示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] ...

  2. return两个返回值_异步函数的两个视角

    我们来一起看一下两个程序员之间的故事. 以下示例代码是用Scala写的,不过本文所讲的话题并不仅限于Scala,任何有Future/Promise支持的语言都是适用的. 下面这个wiki页面罗列了各个 ...

  3. matlab求两向量夹角_高考数学解题技巧:专题21 平面向量中最值、范围问题高中数学黄金解题模板...

    ↑ 点击上方"红色笔记"关注我们 高中各科解题技巧下载  回复数字:800009 高考数学解题技巧:专题24 数列求和方法高中数学黄金解题模板 高考数学解题技巧:专题26 含参不等 ...

  4. python求两数最大公因数_使用辗转相除法求两个数的最大公因数(python实现)

    数学背景: 整除的定义: 任给两个整数a,b,其中b≠0,如果存在一个整数q使得等式 a = bq 成立,我们就说是b整除a,记做b|a. 性质1:如果c|a,c|b,且对于任意的整数m,n,则有c| ...

  5. python普通年金终值_永续年金与其他年金一样,既有现值又有终值。( )

    [单选题]以下代码输出的结果是?( ) while 4 == 4: print('4') [多选题]关于分支结构的描述正确的是( ) [其它]复杂,多个单体 [单选题]迭代输出序列时(如:列表)使用 ...

  6. 用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 ...

  7. java delete方法返回值_以下选项中,哪个是 File 类 delete() 方法返回值的类型?_JAVA程序设计答案_学小易找答案...

    [单选题]72 . 2016年6月5日,甲企业基本生产车间领用材料10 000元,用于生产产品.甲企业应编制的会计分录为 [单选题]安装windows 2008 server的文件是: [单选题]34 ...

  8. 如何知道react对象的值_基于react怎么获取兄弟元素的对象或它的值?

    谢邀. 题主刚学前端的吧,刚用上用react,应该是了解了下DOM然后用起react有这样的疑问.不过没事,慢慢来. 怎么说呢,两个input框在彼此的事件绑定里获取对方的值,在react里是很容易做 ...

  9. 未能比较数组中的两个元素_算法3 寻找两个正序数组的中序数

    问题描述: 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组的中位数.要求设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题. ...

  10. 用spss做多组两两相关性分析_卡方检验的事后两两比较

    卡方检验检出组间差异后,得到的结果只能显示行变量与列变量间是否相互独立,但各变量的不同组别间具体存在何种差异呢?这需要后续通过两两比较来得到更为精确的结论.下面,我将用一个简单的案例向大家演示:在SP ...

最新文章

  1. 最长不下降子序列(推广问题)
  2. 良性代码,恶意利用:浅谈 Return-Oriented 攻击
  3. linux系统md5sum命令用不了,Linux中md5sum命令起什么作用呢?
  4. 2021年峰峰春晖中学高考成绩查询,峰峰春晖中学2019年录取分数线
  5. python supervisor 日志_Supervisor使用详解
  6. (34)FPGA分频设计-奇数分频(第7天)
  7. 不学网php,php不学框架可以吗
  8. VS2012全屏背景修改教程
  9. Bone Collector(hdoj--2602--01背包)
  10. warning C4995: strcat name was marked as #pragma deprecated
  11. 自定义View之Layout方法详解
  12. 【建议收藏】产品经理面试题合集
  13. python 聊天机器人 中文_ 小智,又一个中文聊天机器人
  14. PHP查询微信的投诉单列表
  15. Win10正式版历代记
  16. Axure RP 9 授权码
  17. 流行音乐网站 /音乐网站
  18. Macbook Pro(M1芯片)腾讯会议无法使用共享屏幕功能
  19. oracle10g驱动怎么安装,oracle10g安装后怎么使用
  20. 重生之我是赏金猎人-番外篇-记一次层层突破的攻防演练

热门文章

  1. 可汗学院公开课:线性代数笔记-11-求解三元方程组
  2. 可汗学院公开课:统计学笔记——假设检验
  3. 动态SQL之、条件判断(转)
  4. 买土豆的故事(转中外管理)
  5. html简单导航页单页源码
  6. Python进阶之路(2):批量下载豆瓣FM红心音乐MP3到本地
  7. oracle blob 24909,imp导入含blob字段的大表时不成功
  8. idm由于法律原因无法下载怎么办?
  9. could not establish connection to “hostname”
  10. 用群晖服务器搭建网站