在Python中,布尔值是否可变?

时间:2012-08-10 20:27:51

标签: python django boolean

我在python中有以下代码:

def update(request, id):
  success = 0

  try:
    product = Mattress.objects.get(id=id)
    success = 1
  except Mattress.DoesNotExist:
    pass

  if success == 1:
    return render_to_response("success.html")
  else:
    return render_to_response('failure.html')

此代码是否是检查“成功”布尔值的有效方法。如果代码通过try语句,“success”会更改为1还是保持为0?

4 个答案:

答案 0 :(得分:9)

回答你的问题:

  

python中的布尔值是否可变?

是和否。分配了布尔值的变量(可能总是,并且在这种情况下肯定是可变的)是可变的,是的。它们也不限于分配布尔值,因为变量不是静态类型的。

但布尔值TrueFalse本身并不可变。他们是无法修改的单身人士。

查看您的实际代码:

if success = 1:

语法无效,你想要==。此外,惯用语言您不应该使用01来表示成功和失败值,您应该使用TrueFalse。所以你应该重构这样的事情:

def update(request):
    success = False

    try:
        product = Mattress.objects.get(id=id)
        success = True
    except Mattress.DoesNotExist:
        pass

    if success:
        return render_to_response("success.html")
    else:
        return render_to_response('failure.html')

答案 1 :(得分:1)

是。成功后,success将更改为1。

答案 2 :(得分:1)

此代码段存在一些问题。

  1. 首先,您没有使用布尔类型。 Python的布尔值是TrueFalse
  2. 其次,你不是在if语句中进行比较。该行在Python 3中无效。您要找的是:if success == 1:if success == True:
  3. 无论布尔不变性如何,您仍然可以为变量赋予布尔值。我相信它们存储为基本类型,因此它们与任何其他原始类型一样不可变。

答案 3 :(得分:1)

您应该考虑使用实际的布尔值而不是整数。您可以将success设置为truefalse,Python会将它们解释为值为1和0的关键字。使用数字可能有点棘手,因为有些语言会解释不同的东西。在某些语言中,0为false,但除0之外的任何值都被视为true。但是你的问题的答案是肯定的,它会正常工作。