2016-12-20 66 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

Не нужно вообще ничего такого делать. Вы можете сделать 'arg [0] = 5' внутри вашей функции' modify_list' (передавая 'list_0' вместо' 'list_0''), и вы получите тот же эффект. –

+0

Я тоже не большой поклонник этого решения, но если я правильно понял вопрос, имя списка неизвестно ... и OP _did_ _ask_, как использовать имя переменной в качестве аргумента. – schaazzz

+0

Довольно часто то, что люди просят *, имеет мало общего с тем, что им действительно нужно *. Они не знают, как спросить, что им нужно. –