我上周用python写了一个作业,这里是一个代码片段
def departTime():
'''
Calculate the time to depart a packet.
'''
if(random.random < 0.8):
t = random.expovariate(1.0 / 2.5)
else:
t = random.expovariate(1.0 / 10.5)
return t
Run Code Online (Sandbox Code Playgroud)
你能看到问题吗?我将random.random与0.8进行比较,后者应该是random.random().
当然这是因为我的粗心,但我不明白.在我看来,这种比较应该在任何编程语言中至少引用一个警告.
那么为什么python会忽略它并返回False?
这并不总是一个错误
首先,为了使事情清楚,这并不总是一个错误.
在这种特殊情况下,很明显比较是一个错误.
但是,由于Python的动态特性,请考虑以下(完全有效,如果可怕)代码:
import random
random.random = 9 # Very weird but legal assignment.
random.random < 10 # True
random.random > 10 # False
Run Code Online (Sandbox Code Playgroud)
比较对象时实际发生了什么?
至于您的实际情况,将函数对象与数字进行比较,请查看Python文档:Python文档:表达式.查看标题为"比较"的第5.9节,其中说明:
运算符<,>,==,> =,<=和!=比较两个对象的值.对象不必具有相同的类型.如果两者都是数字,则将它们转换为通用类型.否则,不同类型的对象总是比较不相等,并且一致但是任意地排序.您可以通过定义一个控制非内建类型的对象进行比较的行为CMP方法或比较丰富的方法,如GT,在部分特殊方法名描述.
(这种不寻常的比较定义用于简化操作的定义,如排序和运算符中的in和not.将来,不同类型的对象的比较规则可能会发生变化.)
这应该解释发生了什么以及它的推理.
顺便说一下,我不确定在较新版本的Python中会发生什么.
编辑:如果您想知道,Debilski的答案提供了有关Python 3的信息.