为什么函数定义中的if语句被跳过?

时间:2019-11-05 00:46:18

标签: python if-statement

在enqueue(rb,x)的函数定义中,有一个带增量的if语句,在if语句后有一个大小增量。当我运行代码时,两个变量都没有增加。

我尝试更改main()函数,该函数的范围从N开始,以-1步长在1结束,它将列表的第一个元素更改为1,但仍然不递增,因此它会不断更改第一个元素

def create(capacity):
    buff = stdarray.create1D(capacity, None)
    count = 0
    for i in buff:
        if i != None:
            count += 1
    size = count
    first = 0
    for i in range(len(buff)):
        if buff[i] != None and first == 0:
            first += i
    last = 0
    for i in range(len(buff)):
        if buff[i] == None and buff[i - 1] != None and buff[i +1] == None:
            last += i 
            break
    rb = [buff, size, first, last]
    return rb

def enqueue(rb, x):
    last = rb[3]
    size = rb[1]
    rb[0][last] = x
    if last + 1 == len(rb[0]):
        last = 0
    else:
        last += 1
    size += 1



def _main():
    N = int(sys.argv[1])
    rb = create(N)
    for i in range(1, N + 1):
        enqueue(rb, i)
    stdio.writeln(rb)

if __name__ == '__main__':
    _main()

如果输入为5,则输出应为[[1, 2, 3, 2, 5], 5, 0, 0]。我得到的是[[5, None, None, None, None], 0, 0, 0]

2 个答案:

答案 0 :(得分:2)

我不认为您的if会被跳过,因为它里面的语句不会做任何事情,因为那些变量(sizelast)不会保留在该功能之外的任何地方。

在函数内部声明的变量只会持续到函数返回为止;如果您不将它们分配给寿命更长的对象(例如实例变量)或返回它们,则更改它们的值将无济于事。

答案 1 :(得分:0)

count = 0
for i in buff:
    if i != None:
        count += 1
size = count

计数器为0,因此大小为零,因为您启动了buff = [无,无,无,无,无]。