【问题标题】:Can anyone explain to me why b_list doesn't print c_list? [duplicate]谁能向我解释为什么 b_list 不打印 c_list? [复制]
【发布时间】:2020-06-17 17:42:26
【问题描述】:
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 没有影响?

【问题讨论】:

  • b_list 成为本地函数,只要你有一个赋值,它就会在函数作用域结束后被销毁。
  • 这能回答你的问题吗? Python modifying list within function
  • 您的函数 function_b 没有返回任何内容,并且 Austin 解释的内容也是正确的。

标签: python


【解决方案1】:

使用 function_b 的 return

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()

【讨论】:

    【解决方案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()
    

    【讨论】:

    • 或致电b_list.clear()和b_list.extend(c_list)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2014-01-09
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    相关资源
    最近更新 更多