Python - 传递列表复制语法错误

问题描述 投票:-1回答:4

Python新手,正在测试通过引用传递和传递值的简单示例。但是我遇到了意想不到的语法障碍,但不确定我在这里缺少什么。

#!usr/local/bin python3

def print_reference(list[:]):
    temp = list.pop()
    print(temp)

def print_value(list):
    temp = list.pop()
    print(temp)

list = ['hello', 'goodbye', 'laters']

print_reference(list)
print("After Reference" + list)
print_value(list)
print("After Value" + list)
python function syntax-error parameter-passing
4个回答
2
投票

我认为你的名字倒退了。使用print_value复制lst = lst[:]函数

def print_reference(lst):
    temp = lst.pop()
    print(temp)

def print_value(lst):
    lst = lst[:]
    temp = lst.pop()
    print(temp)

lst = ['hello', 'goodbye', 'laters']

print_value(lst)
print("After Value", lst)
print_reference(lst)
print("After Reference", lst)

输出:

laters
After Value ['hello', 'goodbye', 'laters']
laters
After Reference ['hello', 'goodbye']

顺便说一下,list不是一个好的变量名,因为它会影响内置的'list`。

重要的是区分编译时和运行时发生的情况。一旦定义了函数,这就解决了:

def print_value(lst):

因此,使用list复制[:]没有意义,并且您会收到语法错误。

但是当函数被调用时,函数内部的所有内容都会被执行。因此,这行内部的功能:

lst = lst[:]

每次调用函数时都会生成一个新的(浅)lst副本。此副本仅存在于函数内部,并在函数完成(返回)后进行垃圾回收。


0
投票
def print_reference(lst): # You cannot do a list slice as an argument
    l = lst[:]
    temp = l.pop()
    print(temp)

def print_value(lst):
    temp = lst.pop()
    print(temp)

lst = ['hello', 'goodbye', 'laters']

print_reference(lst)
print("After Reference: " + ''.join(lst))
print_value(lst)
print("After Value: " + ''.join(lst))

0
投票

因为它是语法错误。我不明白这个def print_reference(list[:]):第二个没关系,你把名单的参数放到功能上。您可以通过def print_reference(name: list):指定类型,请参阅:How do I pass a variable by reference?


0
投票

我认为这就是你想要做的xD。无论如何欢迎来到python!

def print_reference(list):
    list = list[:]
    temp = list.pop()
    print(temp)

def print_value(list):
    temp = list.pop()
    print(temp)

list = ['hello', 'goodbye', 'laters']

print_reference(list)
print("After Reference",list)
print_value(list)
print("After Value",list)

问题是您必须传递参数而不进行编辑。您可以在函数内编辑它,但不能直接在括号内编辑它。

def print_reference(list):

将列表名称更改为llst而不是list可能是个好主意,因为list()函数用于将类似字符串的对象放入列表中。

© www.soinside.com 2019 - 2024. All rights reserved.