2012-08-10 83 views
-1

我有蟒蛇以下代码:在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语句,将“成功”更改为1还是保持0?

+1

if if == 1: – VoronoiPotato 2012-08-10 20:29:45

+7

你的代码中没有布尔值,你也不会改变任何东西。 – BrenBarn 2012-08-10 20:30:47

+0

这段代码有很多问题。 – Wug 2012-08-10 20:31:03

回答

7

回答你的问题:

都是布尔可变的蟒蛇?

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

但布尔人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') 
+0

感谢您的帮助!为澄清/学习的快速问题,是否需要包含“成功=错误”? – goelv 2012-08-10 20:38:32

+1

*是*(尽管以大写字母F为例)。在检查其值之前,每个变量都必须分配给它。 – 2012-08-10 20:39:18

+1

@goelv是的,否则你会因为失败而得到一个NameError,因为你试图检查一个尚未分配的变量的值 – 2012-08-10 20:39:27

1

是的。 success将成功更改为1。

+1

我的不好,那是一个错字。我纠正了它。现在怎么样? – goelv 2012-08-10 20:30:46

1

这段代码有一些错误。

  1. 首先,你没有使用布尔类型。 Python的布尔值是TrueFalse
  2. 其次,你没有比较你的if语句。该行在Python 3中无效。您要查找的是:if success == 1:if success == True:
  3. 无论布尔型不变,您仍然可以为变量分配布尔值。我相信它们是以原始类型存储的,所以它们和其他原始类型一样不可变。
1

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