谁能向我解释为什么b_list不打印c_list?

时间:2020-03-05 06:37:23

标签: python

def function_b(b_list, high_num):
    c_list = [0,0,0,0,0,0,0]
    i = 0
    for num in b_list:
        if num> high_num:
            c_list[i] = num
        i = i +1
    b_list = c_list
def main():
    b_list=[1,3,6,4,1,2,8]
    high_num=4
    function_b(b_list, high_num)
    print(b_list)
main()

谁能解释为什么不打印[0,0,6,0,0,0,8]?我认为,由于列表是可变对象,因此如果我们在function_b中分配参数b_list =c_list,它将更改main中找到的b_list。为什么这对我们插入到function_b的参数b_list没有影响?

2 个答案:

答案 0 :(得分:3)

使用function_b的返回值

def function_b(b_list, high_num):
    c_list = [0,0,0,0,0,0,0]
    i = 0
    for num in b_list:
        if num> high_num:
            c_list[i] = num
        i = i +1
    return c_list

def main():
    b_list=[1,3,6,4,1,2,8]
    high_num=4
    b_list = function_b(b_list, high_num)
    print(b_list)
main()

答案 1 :(得分:2)

由于在您的function_b中,b_list是局部变量。它不会影响main函数中的局部变量

使用全局变量,如下所示:

def function_b(high_num):
    global b_list
    c_list = [0,0,0,0,0,0,0]
    i = 0
    for num in b_list:
        if num> high_num:
            c_list[i] = num
        i = i +1
    b_list = c_list
def main():
    global b_list
    b_list=[1,3,6,4,1,2,8]
    high_num=4
    function_b(high_num)
    print(b_list)
main()

或使用返回值:

def function_b(b_list, high_num):
    c_list = [0,0,0,0,0,0,0]
    i = 0
    for num in b_list:
        if num> high_num:
            c_list[i] = num
        i = i +1
    return c_list
def main():
    b_list=[1,3,6,4,1,2,8]
    high_num=4
    b_list = function_b(b_list, high_num)
    print(b_list)
main()