正如所料,1不包含在空元组中>>>1in()False但是返回的False值不等于False>>>1in()==FalseFalse换个角度看,in运算符返回一个bool,它既不是True也不是False:>>>type(1in())>>>1in()==True,1in()==False(False,False)但是,如果原始表达式被括号括起来,则正常行为会恢复>>>(1in())==FalseTrue或者它的值存储在一个变量中>>>value=1in()>>>value==FalseTrue在Python2和Python3中都观察到了这种行为。你能解释一下发生了什么吗?
众所周知,Python对对象有boolean值:如果一个类有一个__len__方法,那么__len__()碰巧返回0的每个实例都会被评估为boolean值False(例如,空列表)。事实上,如果每个可迭代的空自定义对象出现在boolean表达式中,它都会被评估为False。现在假设我有一个带有属性bar的类foo。我如何定义它的真值,例如,如果bar%2==0和False否则它将被评估为True?例如:myfoo=foo()myfoo.bar=3defa(foo):iffoo:print"spam"else:print"eggs"所以,a(myfoo)应该打印"eggs"。
众所周知,Python对对象有boolean值:如果一个类有一个__len__方法,那么__len__()碰巧返回0的每个实例都会被评估为boolean值False(例如,空列表)。事实上,如果每个可迭代的空自定义对象出现在boolean表达式中,它都会被评估为False。现在假设我有一个带有属性bar的类foo。我如何定义它的真值,例如,如果bar%2==0和False否则它将被评估为True?例如:myfoo=foo()myfoo.bar=3defa(foo):iffoo:print"spam"else:print"eggs"所以,a(myfoo)应该打印"eggs"。
似乎“ifx”几乎是较长的“ifxisnotNone”语法的简写。它们在功能上是相同的,还是在某些情况下,对于给定的x值,两者的评估方式不同?我认为在Python实现中的行为也应该是相同的-但如果有细微的差异,那就太好了。 最佳答案 以下情况:test=Falsetest=""test=0test=0.0test=[]test=()test={}test=set()if测试会有所不同:iftest:#FalseiftestisnotNone:#True之所以如此,是因为is测试身份,意义testisnotNone等价于id(test
似乎“ifx”几乎是较长的“ifxisnotNone”语法的简写。它们在功能上是相同的,还是在某些情况下,对于给定的x值,两者的评估方式不同?我认为在Python实现中的行为也应该是相同的-但如果有细微的差异,那就太好了。 最佳答案 以下情况:test=Falsetest=""test=0test=0.0test=[]test=()test={}test=set()if测试会有所不同:iftest:#FalseiftestisnotNone:#True之所以如此,是因为is测试身份,意义testisnotNone等价于id(test
ifmyval==0:nyval=1ifmyval==1:nyval=0有没有更好的方法在python中进行切换,比如nyvalue=notmyval? 最佳答案 使用notbooleanoperator:nyval=notmyvalnot返回一个boolean值(True或False):>>>not1False>>>not0True如果你必须有一个整数,把它转换回来:nyval=int(notmyval)不过,pythonbool类型是int的子类,所以可能不需要:>>>int(not0)1>>>int(not1)0>>>not0
ifmyval==0:nyval=1ifmyval==1:nyval=0有没有更好的方法在python中进行切换,比如nyvalue=notmyval? 最佳答案 使用notbooleanoperator:nyval=notmyvalnot返回一个boolean值(True或False):>>>not1False>>>not0True如果你必须有一个整数,把它转换回来:nyval=int(notmyval)不过,pythonbool类型是int的子类,所以可能不需要:>>>int(not0)1>>>int(not1)0>>>not0
我正在寻找某种类似的映射函数f():f(str)=''f(complex)=0jf(list)=[]意味着它返回一个类型的对象,当转换为bool时,该对象的计算结果为False。有这样的功能吗? 最佳答案 不,没有这样的映射。并非每种类型的对象都有一个虚假值,而其他类型的对象不止一个。由于可以使用__bool__method自定义类的真值,理论上一个类可以有无数个(不同的)虚假实例。也就是说,大多数内置类型在不带参数的情况下调用它们的构造函数时都会返回它们的假值:>>>str()''>>>complex()0j>>>list()[]
我正在寻找某种类似的映射函数f():f(str)=''f(complex)=0jf(list)=[]意味着它返回一个类型的对象,当转换为bool时,该对象的计算结果为False。有这样的功能吗? 最佳答案 不,没有这样的映射。并非每种类型的对象都有一个虚假值,而其他类型的对象不止一个。由于可以使用__bool__method自定义类的真值,理论上一个类可以有无数个(不同的)虚假实例。也就是说,大多数内置类型在不带参数的情况下调用它们的构造函数时都会返回它们的假值:>>>str()''>>>complex()0j>>>list()[]
没有循环是否可以将所有列表值初始化为某个boolean值?例如,我想要一个包含N个元素的列表,全部为False。 最佳答案 你可以这样做:->>>[False]*10[False,False,False,False,False,False,False,False,False,False]注意:-请注意,您永远不应该对具有相同值的mutabletypes的list执行此操作,否则您会看到以下示例中的令人惊讶的行为:->>>my_list=[[10]]*3>>>my_list[[10],[10],[10]]>>>my_list[0][0