Как передать список в аргумент функции в Python?
Есть такой код и в нем все работает так, как и должно быть:
m=1000
t=10 #постоянная времени
x=[]
y=[]
for a in range(m):
b=0
if 300 < a < 700:
b=1
x.append(b)
for n in range (m):
imp=(1/t)*exp(-n/t) #имп. хар-ка для интегрирующей цепи
h.append(imp)
y=np.convolve(x,h) #операция свертки двух функций
print (x)
print (h)
print (y)
pp.plot(x)
pp.plot(y)
pp.show()
Теперь мне нужно запихнуть это все в функцию от аргумента - списка х
Вот, что я делаю:
def integrFiltr(x):
for a in range(m):
b=0
if 300 < a < 700:
b=1
x.append(b)
Теперь на выходе у меня получается пустой список y, и, следовательно, второй график не строится
for n in range (m):
imp=(1/t)*exp(-n/t) #имп. хар-ка для интегрирующей цепи
h.append(imp)
y=np.convolve(x,h)
integrFiltr(x)
Что не так?
Ответы (1 шт):
Чтобы функция изменяла переменные вне своего блока, их нужно объявить как глобальные:
x, y = [], []
def integrFiltr():
global x, y # теперь под этими названиями подразумеваются глобальные переменные
# все остальные действия функции тут
integrFiltr()
Однако, такой подход менее предпочтителен, чем следующий:
x, y = [], []
def integrFiltr(x, y):
# все действия вашей функции тут
return x, y
x, y = integrFiltr(x, y)
Разумеется, если функции нужны не только x и y, но и другие переменные, их нужно указывать как глобальные при первом подходе, или же как параметры при втором (и передавать при вызове, соответственно). Притом в return их писать не нужно, если функция не должна их менять