python一个函数调用另一个函数的返回值_在python函数中使用True,False和None作为返回值...

建议不是你不应该使用True,False或None。这只是你不应该使用如果x == True。

如果x == True是愚蠢的,因为==只是一个二进制运算符!它的返回值为True或False,取决于它的参数是否相等。如果条件为真,则条件将继续。所以当你写如果x == True Python将首先评估x == True,如果x是True和False否则将变为True,然后继续,如果结果是真的。但是如果你期望x是True或False,为什么不直接使用x?

同样,x == False通常可以由x替换。

在某些情况下,你可能想使用x == True。这是因为if语句条件是“在布尔上下文中评估”,以查看它是否为“真实”,而不是完全对照True。例如,非空字符串,列表和字典都被if语句视为真实的,以及非零数字值,但这些都不等于True。所以如果你想测试一个任意值是否正确的值True,不只是它是否为真,当你会使用如果x == True。但我几乎从来没有看到一个用途。它是如此罕见,如果你需要写,这是值得添加一个评论,所以未来的开发人员(包括可能自己)不只是假设== True是多余的,并删除它。

使用x是真的,而实际上更糟。你永远不应该使用基本的内置不可变类型,如布尔值(True,False),数字和字符串。原因是,对于这些类型,我们关心价值,而不是身份。 ==测试这些类型的值是否相同,而始终是测试标识。

测试标识而不是值是坏的,因为一个实现可以理论上构造新的布尔值,而不是去找到现有的值,导致您有两个True值具有相同的值,但存储在不同的内存中,具有不同的身份。在实践中我很确定True和False总是被Python解释器重用,所以这不会发生,但这是一个实现细节。这个问题使人们一直使用字符串,因为直接出现在程序源中的短字符串和字符串会被Python重用,所以’foo’是’foo’总是返回True。但是很容易构造相同的字符串2种不同的方式,并让Python给他们不同的身份。请注意以下事项:

>>> stars1 = ''.join('*' for _ in xrange(100))

>>> stars2 = '*' * 100

>>> stars1 is stars2

False

>>> stars1 == stars2

True

编辑:所以事实证明,Python的平等布尔是一个有点意想不到的(至少对我):

>>> True is 1

False

>>> True == 1

True

>>> True == 2

False

>>> False is 0

False

>>> False == 0

True

>>> False == 0.0

True

正如the notes when bools were introduced in Python 2.3.5中解释的那样,使用整数1和0来表示True和False的旧行为是好的,但是我们只是想要更多描述性的名称用于表示真值的数字。

一种实现方法是在内置函数中只有True = 1和False = 0;那么1和True真的会无法区分(包括by)。但这也意味着一个函数返回True将在交互式解释器中显示为1,因此所做的是将bool创建为int的子类型。唯一不同的是bool是str和repr; bool实例仍然具有与int实例相同的数据,并且仍然以相同的方式比较等式,所以True == 1。

所以这是错误的使用x是True,当x可能已经设置了一些代码,希望“真是只是另一种方式拼写1”,因为有很多方法来构造值等于True,但没有相同的身份:

>>> a = 1L

>>> b = 1L

>>> c = 1

>>> d = 1.0

>>> a == True, b == True, c == True, d == True

(True, True, True, True)

>>> a is b, a is c, a is d, c is d

(False, False, False, False)

并且使用x == True是错误的,当x可以是一个任意的Python值,你只想知道它是否是布尔值True。我们唯一确定的是,只是使用x是最好的,当你只是想测试“诚实”。幸好这通常是所有必需的,至少在我写的代码!

一个更确定的方式是x == True和type(x)是bool。但是对于一个很晦涩的情况,这变得很冗长。它也不看起来非常Pythonic通过进行显式类型检查…但这真的是你在做什么,当你试图精确测试True而不是真实;鸭式键入方式将接受真值,并允许任何用户定义的类声明自己是真实的。

如果你处理这个非常精确的真理概念,你不仅不认为非空集合是真的,但也不认为1是真的,那么只是使用x是True可能是好的,因为大概那么你知道x没有来自认为1是真的代码。我不认为有任何纯python的方式来提出另一个True,生活在一个不同的内存地址(虽然你可能从C做),所以这不应该打破,尽管理论上是“错误的”事情去做。

我以前认为布尔人很简单!

结束编辑

然而,在None的情况下,如果x是None,则使用惯用法。在许多情况下,你可以使用if不是x,因为None对于if语句是一个“falsey”值。但是最好只有这样做,如果你想要以相同的方式来处理所有falsey值(零值数值类型,空集合和无)。如果你正在处理的值是一些可能的其他值或无表示“无值”(例如,当一个函数返回None失败),那么更好的使用如果x是无,这样你不会意外地假定函数失败,当它刚刚发生返回一个空列表,或数字0。

我使用==而不是为不可变的值类型的参数建议你应该使用如果x ==无,而不是如果x是无。但是,在无Python的情况下,显式保证在整个Universe中只有一个None,而正常的惯用Python代码使用的是。

关于是返回None还是引发异常,它取决于上下文。

对于像get_attr这样的例子,我希望它引发异常,因为我要像do_something_with(get_attr(file))一样调用它。调用者的正常期望是,他们将获得属性值,并让他们获得无,并假设属性值是一个更大的危险,比忘记处理异常,当你可以实际继续,如果属性不能被发现。此外,返回None以指示失败意味着None不是该属性的有效值。这在某些情况下可能是一个问题。

对于像see_if_matching_file_exists这样的虚函数,我们提供了一个模式,它检查几个地方,看看是否有匹配,如果找到一个匹配可以返回一个匹配,如果没有匹配,则返回None。但也可以返回一个匹配列表;那么没有匹配只是空列表(这也是“falsey”;这是其中一种情况,我只是使用如果x看看是否有什么回来)。

因此,当选择异常和无指示失败时,必须确定None是否为预期的非失败值,然后查看调用函数的代码的期望值。如果“正常”期望是将返回有效值,并且只有偶尔会调用者能够正常工作,无论是否返回有效值,那么您应该使用异常来指示失败。如果没有有效的值会很常见,因此调用者将期望处理这两种可能性,那么您可以使用None。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

w7系统计算机里没有摄像头,win7系统没有摄像头不能视频的几种原因和解决方法...

电脑升级到win7旗舰版系统后,发现摄像头没有了,之前xp系统在硬盘符中就可以打开摄像头的,可是win7系统没有摄像头怎么办呢?这样就没办法视频了,针对此问题,小编研究出原来要从程序里面调出摄像头功能&#…

python画相关性可视化图_Python 可视化 | 关联图 - 散点图1

什么是关联图? 关联图是查找两个事物之间关系的图像,他能为我们展示出一个事物随着另一个事物的变化如何变化。 典型的关联图有:折线图、散点图、相关矩阵等 我们什么时候会需要关联图? 1、数据报告 & 学术研究 展示趋势&…

新计算机 安装win2000,图文教程!Windows 2000安装过程全接触

13、填写计算机名:安装程序提供了文字输入确定用户的计算机名和其它的设置。   在此,需要声明的是:安装程序会创建一个称为Administrator(系统管理员)的用户帐户,它拥有完全控制计算机的权限。确定这个帐户时,安装程序要求用户输入“系统管…

python创建多线程_初学者看过来:Python中多线程和多处理的指南

使用Python分析数据,如果使用了正确的数据结构和算法,有时可以大量提高程序的速度。实现此目的的一种方法是使用Muiltithreading(多线程)或Multiprocessing(多重处理)。 使用Python分析数据,如果使用了正确的数据结构和算法,有时可…

css如何实现一个小三角形,用纯css写一个常见的小三角形

js小技巧js判断字符长度 直接使用String对象的属性,空格亦算一个字符 myString "Hello world"; length myString.length js比较字 ...c#接口容易被忽视的问题今天在看"并发集合"的时候,接口IProducerConsumerCollection 有一个方法是TryAdd(),表…

python求50的阶乘_python中求阶乘

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我如何去计算python中的一个整数的阶乘?...写一个猜数字的游戏,预先设定一个数字&am…

项目部署服务器 jstl,Springboot集成jsp及部署服务器实现原理

1.在application配置文件里面加入配置:spring:mvc:view:prefix: /jsp/suffix: .jsp2.手动在src->main->下面创建webapp文件夹3.在Springboot 启动类加入如下代码:Beanpublic InternalResourceViewResolver setupViewResolver() {InternalResourceV…

c primer英文版第5版_2019足坛10大巨星:梅西第2范戴克第3,C罗第5

点击“关注”获得更多更新更有趣的足坛资讯!2019年的足坛英雄辈出、岁月激荡。阿贾克斯的青年军两回合力克尤文闯进欧冠四强,梅西梅开二度难救主,巴萨遗憾止步欧冠半决赛,利物浦横扫欧陆,无奈联赛杯赛统统被国内曼城压…

python三维图能画地图_Python地图绘制实操详解

网上有很多地图绘制的教程,更多趋向于全国地图或者省级地图,但有时我们需要到县级。闲得慌,今天以贵州省毕节市为例,分享一篇Python县级地图的绘制(遥想当时差点把百度翻了个底朝天),希望对需要…

ajax juey,锋利的qjuey-ajax

jquery 中的ajaxload方法主要获取web服务器上静态数据1 load方法载入HTML文档load(url [,data] [,callback])$(function(){$("#send").click(function(){$("#resText").load("test.html")})})View Code2 筛选载入的HTML文档$("#resText&quo…

java读取pem格式私钥_openssl生成RSA格式及pkcs1与pkcs8格式互相转换

openssl简介OpenSSL 是一个开源项目,其组成主要包括以下三个组件:openssl:多用途的命令行工具libcrypto:加密算法库libssl:加密模块应用库,实现了ssl及tlsopenssl可以实现:密钥证书管理、对称加…

sql服务器文件夹共享,sqlserver2017共享功能目录路径不可改的解决方法

注意:什么路径不可改就搜索该路径进行删除注册表记录,然后重启电脑按 win键盘R输入 regedit 进去注册表,点击计算机按“编辑”--》查找下一个需要等一些时间结果出来后把搜到的结果的项删除删除之后 按F3继续查找下一个进行删除,…

python语义分析_Python差异的潜在语义分析

我正在尝试使用以下代码在 Python中遵循 Wikipedia Article on latent semantic indexing: documentTermMatrix array([[ 0.,1.,0.,1.],[ 0.,0.],[ 1.,0.]]) u,s,vt linalg.svd(documentTermMatrix,full_matricesFalse) sigma diag(s) ## remove extra dimension…

tt协议号服务器,TTIot: TTIoT云端物联网Iot组件;面向JAVA;netty;mqtt;异步推送;以事件为驱动;为设备提供安全可靠的连接通信能力;...

TTIoT云端物联网组件;面向JAVA;以事件为驱动;为设备提供安全可靠的连接通信能力TTIoT简介TTIOT的Broker采用MQTT协议与设备进行交互,可以应用在数据采集、能源监控、智能生活、智能工业、农业水利等场景;向下提供连接海量设备服务,支撑设备数据采集上云,…

python圆面积函数_Python基础函数必学

S πr2 当我们知道半径r的值时,就可以根据公式计算出面积。假设我们需要计算3个不同大小的圆的面积: r1 12.34 r2 9.08 r3 73.1 s1 3.14 * r1 * r1 s2 3.14 * r2 * r2 s3 3.14 * r3 * r3 当代码出现有规律的重复的时候,你就需要当心了…

javamail发送html正文文件_Python实现-生成测试报告amp;自动邮件发送

之前单独介绍了生成测试报告和自动发送邮件,那么现在把两者整合到一起;生成测试报告后然后自动发送邮件,这里只是简单的整合实现功能,其实还可以优化的,先用吧,后面再慢慢优化先看下目录,其实目…

笨方法学python3怎么样_有个很笨的女朋友,是怎么样的体验?

我是妹子 ,但是我并不觉笨是可爱. 反而觉得自己是累赘。 为什么别人可以思考过来的东西, 我却需要很费劲? 为什么 ?我的逻辑思维能力很差? 我没有感觉到自己是可爱 ,甚至感到自卑。 一提到学习,…

byte转换为string乱码_每日一课 | 如何将int转换为String

在Python中&#xff0c;我们可以使用str()将int转换为String。num1 100print(type(num1)) # int> num2 str(num1) print(type(num2)) # str>输出量<class int><class str>参考文献&#xff1a;Python文档– str()Python –如何将String转换为int翻译自: ht…

openssh升级后root_又一root神器停止营业!时至今日你还需要root吗

[PConline杂谈]最近&#xff0c;一条新闻引起了安卓玩家们的注意——360超级root宣布停止运营。在此前&#xff0c;也已经有其他知名root工具和玩家们渐行渐远&#xff0c;例如SuperSu开发者宣布停止开发所有root应用。除了root工具停止开发&#xff0c;root机在用户群中的热度…

MyBatis中or和and的使用问题

在使用or和and混合使用时&#xff0c;name成立并且想要age和bj其中一个成立就显示&#xff0c;这样写&#xff1a; QueryWrapper userWrapper new QueryWrapper(); userWrapper.eq(“name”, name); userWrapper.eq(“age”, age).or().eq(“bj”, bj); 出来的sql语句&#…