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