与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. iOS 设置UILabel 的行间距
  2. 软件工程概论作业:返回一个整数数组中最大子数组的和
  3. golang 开发常见坑
  4. FreeLibraryAndExitThread DLL中线程的安全退出
  5. 如何在一个程序集中序列化在另一个中反序列化
  6. win10如何将已有python环境变量添加到电脑中 错误 Fatal error in launcher: Unable to create process using pip.exe 解决办法
  7. 在WIN7系统的笔记本上建立WIFI热点
  8. html 页面跳转 中文传值,两html页面之间的传值,并解决中文乱码问题
  9. node+koa2+mysql搭建博客后台
  10. 苹果笔记本电脑亮度无法调节_苹果MacBook AirM1评测:M1芯片给您不一样的体验
  11. Aruba 云服务代金券
  12. 数据库原理—DBS的物理组成和结构模式(五)
  13. Codeforces Round #237 (Div. 2)
  14. 手写模拟器,将电子文档转换为手写字体,就用这个软件
  15. 2022高压电工考试试题及在线模拟考试
  16. 3d打印英语文献_万华推出可3D打印PP粉末材料
  17. 怎么样添加桌面我的计算机,怎么样把我的电脑添加到桌面上
  18. 绿色下载:CYY屏幕截图助手1.3
  19. 关于金币鉴别的基础知识和简易操作
  20. Cisco *** Client 报错问题

热门文章

  1. AUTOSAR架构深度解析
  2. Top 50 有趣网站
  3. 一款轻量级的权限框架,轻松搞定项目权限
  4. 【IDEA】windows、mac下IDEA下载的驱动包在哪
  5. 医学图像笔记(一)dicom数据格式
  6. 疫情期间,找工作的一些建议
  7. C语言程序的undefined,c语言中undefined reference to 怎么解决
  8. BVH with SAH (Bounding Volume Hierarchy with Surface Area Heuristic)
  9. 7大Python IDE工具推荐
  10. Revel框架基本使用和搭建教程