【发布时间】:2017-05-29 16:09:44
【问题描述】:
不知道我在哪里读到这个建议,但如果我需要将值序列作为函数参数传递,我正在使用元组。可能我这样做是因为它是不可变的,我被建议通过阅读一些书或通过课程来这样做。但是现在我需要一个函数,列表应该作为参数传递(因为我需要在其中使用pop)。现在,当我比以前更有经验时,我只是想知道,将列表作为函数参数传递有什么问题吗?
我知道使用列表作为默认值 - 不是一件好事。但是简单的论证呢?之后是否有任何问题,或者我应该遵循的唯一规则 - 不要使用列表作为参数默认值?
例如,做这样的事情 - 不是一件好事:
def hello(arg_string="abc", arg_list = []):
print arg_string, arg_list
arg_string = arg_string + "defg"
arg_list.append("A")
for i in range(4):
hello()
输出将是
abc []
abc ['A']
abc ['A', 'A']
abc ['A', 'A', 'A']
但是,如果我想要一些简单的东西,无论是否更改对象,但我在哪里可以确定我可以记录我更改了什么:
def hello(arg_list = []):
for i in arg_list:
print(i)
hello(["1","2","3"])
这里的输出是:
1
2
3
【问题讨论】:
-
你试过了吗?
-
如果您在问题中添加一个小示例,它将帮助人们准确理解您在说什么。函数属性是一种为函数提供静态存储的便捷方式,但它们在 Python 中并不常用。
-
你是指属性还是参数?属性是
.分配的属性,参数是调用函数时()中的参数。 -
FWIW,这是我的一个旧答案,它有一个使用函数属性 (
func.count) 进行静态存储的函数:stackoverflow.com/a/26501218/4014959 -
@Unbrok3n 没问题,你能不能edit 这个问题,也许包括一个简短的例子,你如何在列表中传递。只是为了让问题在不阅读 cmets 的情况下自我解释?
标签: python list python-3.x parameter-passing