参数定义中的初始化

嗨,我知道这是一个非常简单的问题,但是文档似乎是
专为可能找到这个问题答案的人设计
非常明显。但这对我来说一点也不明显。
我不知道为什么定义函数时,变量
(特别是一个列表)我在参数中定义和初始化
定义不会在每次调用时初始化自身。因此对于
例如,从num中简单地列出计数序列时(a
范围列表),如果我多次调用该函数,它将附加
列表的元素生成了以前调用的时间,甚至
尽管该列表的变量在参数中初始化
定义。
def foo_range(num,alist = []):
alist = []
#为什么这似乎需要额外的初始化?不应该
在参数定义中初始化?
#但是如果它不存在,并且该函数被多次调用
生成的元素(见下文)
#将其应用于之前生成的列表。
num <= 10:
alist.Append(num)
num += 1
别的:
返回alist
为什么是这样?谢谢,希望它不是一个愚蠢的Quesiton。

# 回答1


2008年11月21日星期五,下午1:25,brentt
那应该是:def foo_range(num,alist = none):
不,但这是一个非常常见的询问:http://effbot.org/zone/default-values.htm
干杯,
克里斯
- -
遵循鬣蜥的路径... http://rebertia.com
# 回答2


11月21日,4:25*PM,Brentt 不用担心,对于 *任何人 * python的新人来说,这并不明显(许多没有 -
如此新的问题)。
叹息..不,这根本不是愚蠢的;实际上是(并且可能会
不幸的是)所有时间中最常见的常见问题解答:http://www.python.org/doc/faq/genera...etwon-wonion-objects
乔治
# 回答3


11月22日,8:25*AM,Brentt 您是否通过教程(哪个文档的一部分)工作?请参阅http://docs.python.org/tutorial/cont...rgument-values
....寻找"重要警告"
# 回答4


布伦特写道:
DEF语句是创建函数的可执行语句
目的。执行DEF语句时,参数列表,
包括默认ARG对象表达式,评估用于创建
功能对象及其关联的代码对象。 "套房"
遵循":"并为代码对象编译了可能的DOC字符串。
函数定义的语言手册输入解释了这一点
第一句话以粗体。
"当函数定义为时,评估默认参数值
执行。这意味着在
函数已定义,并且使用相同的预计值用于
每个电话。这是尤其重要的是要了解默认时
参数是一个可变的对象,例如列表或字典:如果是
函数修改对象(例如,将项目附加到列表中),
默认值实际上已修改。"
允许选择对"默认"进行评估 无论是
定义功能,几乎总是想要的,或者当
通过使用无或其他标志对象,然后进行测试来调用函数。
tjr
# 回答5


-----开始PGP签名消息-----
哈希:sha1
Brentt Schrieb:
|嗨,我知道这是一个非常简单的问题,但是文档似乎是
|专为可能找到这个问题答案的人设计
|非常明显。但这对我来说一点也不明显。
|
|我不知道为什么定义函数时,变量
| (特别是一个列表)我在参数中定义和初始化
|定义不会在每次调用时初始化自身。因此对于
|例如,从num中简单地列出计数序列时(a
|范围列表),如果我多次调用该函数,它将附加
|列表的元素生成了以前调用的时间,甚至
|尽管该列表的变量在参数中初始化
|定义。
|
| def foo_range(num,alist = []):
| alist = []
| #为什么这似乎需要额外的初始化?不应该
|在参数定义中初始化?
| #但是如果它不存在,并且该函数被多次调用
|生成的元素(见下文)
| #将其应用于之前生成的列表。
| num <= 10:
| alist.Append(num)
| num += 1
|别的:
|返回alist
|
|为什么是这样?谢谢,希望它不是一个愚蠢的Quesiton。
查找http://docs.python.org/tutorial/cont...ning-functions
"函数的执行引入了一个新的符号表
功能的局部变量。更确切地说,所有变量
函数中的分配将值存储在本地符号表中;
而变量引用首先在本地符号表中查看,然后
在封闭功能的本地符号表中,然后在全局中
符号表,最后在内置名称表中。因此,全球
变量不能直接分配一个函数中的值(除非
在全球声明中命名),尽管可能被引用。"
埃贡
| - -
| http://mail.python.org/mailman/listinfo/python-list
-----开始PGP签名-------------
版本:gnupg v1.4.6(gnu/linux)
评论:将gnupg与mozilla一起使用-http://enigmail.mozdev.org
ID8DBQFJJZ2IZRIDO9IQ4Q4QIRAHTLAJ41TTYSVN ++ TNF1TVANJA XBPHDBAWCFE1TY
uddbpywbaekbynhbkqgkx88 =
= 9GL8
-----结束PGP签名-----
# 回答6


2008年11月21日星期五13:25:45 -0800,布伦特写道:
因为您尚未告诉函数每次初始化值
叫做。您正在误解下工作。函数默认
定义函数时,创建一次值。
不,不是。您需要重新设置您的思考,这不是Python
做。尝试这个:
def昂贵():
#模拟昂贵的功能调用
导入时间
时间。
返回时间。时间()
def鹦鹉(x =昂贵()):
返回x
昂贵的电话仅是一次。如果您想每次都做到
每次都必须明确打电话:
def鹦鹉(x = none):
如果x不:
x =昂贵()
返回x 对于奖励标记,可以预测这一点的行为: def垃圾邮件(): def ham(x =昂贵()): 返回x 返回火腿() - - 史蒂文
# 回答7

乔治·萨基斯(George Sakkis)写道: 不用担心,对于 *任何人 * python的新人来说,这并不明显(许多没有 - 如此新的问题)。 为自己说话,不是为我说话。

标签: python

添加新评论