2016-12-20 124 views
1

我想做一个函数,其参数是列表L的名称及其参数。列表L中只有数字,我想将它们全部舍入到小数点后1位(顺便说一下,列表L中的元素应该是由圆整的数字代替,我不想要一个新的列表M与他们)。可悲的是,列表名称因我计划的脚本而异,此类列表的长度也不相同。这里是我的失败尝试:作为函数参数的变量名?

def rounding(name,*args): 
    M=[round(i,1) for i in args] #here is the list I want L to become 
    name=M #here I try to replace the previous list with the new one 

morada=[1,2.2342,4.32423,6.1231] #an easy example 
rounding(morada,*morada) 
print morada 

输出:

[1, 2.2342, 4.32423, 6.1231] #No changes 

回答

3

有功能return的值。

def rounding(list_): 
    return [round(i, 1) for i in list_] 

然后,你可以这样做:

>>> morada=[1,2.2342,4.32423,6.1231] #an easy example 
>>> morada = rounding(morada) 
>>> morada 
[1, 2.2, 4.3, 6.1] 

或者,如果你真的希望它的功能中,指派你可以这样做:

def rounding(list_): 
    list_[:] = [round(i,1) for i in args] 
1

关闭。列表是可变的,所以......

name[:] = M 
0

您可以使用eval()

例如,以下内容将以包含[1,2,3,4]的列表开始并更改第一个元素为5:

list_0 = [1, 2, 3, 4] 

def modify_list(arg): 
    list_1 = eval(arg) 
    list_1[0] = 5 

modify_list('list_0') 
print list_0 
+0

根本没有必要这样做。你可以在你的'modify_list'函数(通过'list_0'而不是''list_0'')内部执行'arg [0] = 5',你会有同样的效果。 –

+0

我不是这个解决方案的忠实粉丝,但是如果我正确地理解了这个问题,列表的名字是未知的......并且OP _did_ _ask_如何使用变量名作为参数。 – schaazzz

+0

很多时候,人们*要求的*与他们*实际需要的*无关。他们不知道如何问他们需要什么。 –