我在名为test.py的python(2.7版)文件中写了一个函数“getlist()”,如下所示:
d_list = []
def getlist(a):
b = int(a) + 7
c = [b, b + 9, b + 2*9, b + 3*9]
for i in c:
text = "%s" % i
d_list.append(text)
return d_list
好消息是它可以很好地将列表作为回报,但坏消息是它会变得越来越大:
>>> import test
>>> test.getlist(1980)
['1987', '1996', '2005', '2014']
>>> test.getlist(1990)
['1987', '1996', '2005', '2014', '1997', '2006', '2015', '2024']
显然,返回的列表将包含已返回的所有内容。然后,我改变了这个想法的功能:给它一个条件,如果列表中有返回,只需先清除它们。更改后的代码如下:
d_list = []
def getlist(a):
b = int(a) + 7
c = [b, b + 9, b + 2*9, b + 3*9]
for i in c:
text = "%s" % i
if d_list:
d_list[:] = []
d_list.append(text)
else:
d_list.append(text)
return d_list
但现在,该功能无法按预期工作。例如:
>>> import test
>>> test.getlist(1980)
['2014']
>>> test.getlist(1990)
['2024']
它只返回列表的项目,它的最大值。我怎么能得到一个列表作为回报?谢谢。
答案 0 :(得分:2)
这就是发明局部变量概念的原因。
def getlist(a):
d_list = []
b = int(a) + 7
c = [b, b + 9, b + 2*9, b + 3*9]
for i in c:
text = "%s" % i
d_list.append(text)
return d_list
答案 1 :(得分:1)
根据ravi的回答,您可以使用以下代码提高代码效率:
def getlist(a):
d_list = []
b = int(a) + 7
d_list = [str(b), str(b + 9), str(b + 2*9), str(b + 3*9)]
return d_list
str(b), str(b+9), etc...
将您的值转换为字符串,因为它们放入列表中,这比使用c
循环遍历for
列表然后附加这些新值更有效到d_list
。
答案 2 :(得分:1)
这里的小猪支持就是使用python列表理解:
def getlist(a):
b = int(a) + 7
d_list = [str(b + multiplier * 9) for multiplier in range(0,4)]
return d_list