list 作为参数传参的 不能把参数带回来的问题?

def file2list(filename, list_data):
    with open(filename, 'r') as f1:
        list_data = f1.readlines()
        print(list_data)



    print('数据记录有%s' % (len(list_data)))



# 读取文件到list中
list4 = []
file2list("text.log", list4)
print(list4)

list4 作为参数传入file2list函数,为什么不可以,把文件中读取的内容打印出来。

用下面的方法才能传出来

def file2list(filename, list_data):
    with open(filename, 'r') as f1:
        temp = f1.readlines()

    for str in temp:
        list_data.append(str)

    print('数据记录有%s' % (len(list_data)))
最佳答案

在函数中直接赋值,是创建一个新对象;而使用列表的 append 方法是修改原对象。使用 id 函数可以证明这一点:

# def file2list(filename, list_data):
#     with open(filename, 'r') as f1:
#         list_data = f1.readlines()
#     #     print(list_data)
#     # print('数据记录有%s' % (len(list_data)))
#     print("Inside the function, id of list_data:", id(list_data))


def file2list(filename, list_data):
    with open(filename, 'r') as f1:
        temp = f1.readlines()

    for str in temp:
        list_data.append(str)
    print("Inside the function, id of list_data:", id(list_data))

    # print('数据记录有%s' % (len(list_data)))

# 读取文件到list中
list4 = []
print("Before function call, id of list4:", id(list4))
file2list("text.log", list4)
print("After function call, id of list4:", id(list4))
1年前 评论
讨论数量: 2

append 修改的是数据引用吧,直接赋值不是

1年前 评论

在函数中直接赋值,是创建一个新对象;而使用列表的 append 方法是修改原对象。使用 id 函数可以证明这一点:

# def file2list(filename, list_data):
#     with open(filename, 'r') as f1:
#         list_data = f1.readlines()
#     #     print(list_data)
#     # print('数据记录有%s' % (len(list_data)))
#     print("Inside the function, id of list_data:", id(list_data))


def file2list(filename, list_data):
    with open(filename, 'r') as f1:
        temp = f1.readlines()

    for str in temp:
        list_data.append(str)
    print("Inside the function, id of list_data:", id(list_data))

    # print('数据记录有%s' % (len(list_data)))

# 读取文件到list中
list4 = []
print("Before function call, id of list4:", id(list4))
file2list("text.log", list4)
print("After function call, id of list4:", id(list4))
1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!