Вызов массива из одной функции в другой

#python

#python

Вопрос:

 def Data_to_array(filename_and_path):

    r = int
    x, y=[],[]
    data = []
    line_num = 0
    #call data

    P = open(filename_and_path,'r')
    data = P.readlines()
        #Get it to ignore strings
    for line in data:
        line_num  = 1
        if line.find("[data]") >= 0:
            r = (line_num 1)
            # Data = P.readlines()[:r]     
            # print (Data)
        if "Sampling Rate" in line:
            SR = float(line[15:])
       
        if "temperature=" in line:
            T = float(line[12:18])
            print(str("Temperature = ")) 
            print(T)
    Data = data[r:line_num] 

    #assign data into dataframe
    df = pd.DataFrame(Data)
    #rename column in data
    df = df.rename(columns = {0: 'volts'})
    #get it to recognise the index
    df.index.name = 'Index'
    #get it to recognise the data as number
    df = df.astype({'volts': float})
    #get index to start at 1
    df.index  = 1
    #assign data to lists
    I = df.index.to_list()
    t = df['volts'].to_list()
    #get it to invert data
    y = [element * -1 for element in t]
    #multiply by sampling rate
    x = [element /(SR) for element in I]

def Plot_Data (Data_to_array):
        X,Y = [],[]
        #assign data to X array
        X = Data_to_array.x
        #assign data to Y array
        Y = Data_to_array.y
    #Plot graph
    plt.plot(X,Y)
  

Это мои две функции, но при запуске этой программы она выдает следующую ошибку: AttributeError: 'function' object has no attribute 'x' . Я не вижу, как заставить его распознавать данные, отсортированные в первой функции. Мне нужна вторая функция, потому что построение графика будет усложняться по мере продолжения этой работы.

Комментарии:

1. Локальные переменные в функции, такие как «x», «y», … здесь, исчезают, когда функция завершается. Вы должны либо использовать глобальные переменные, возвращать значения, преобразовывать функции в методы в классе с переменными экземпляра, либо аналогичные решения.

Ответ №1:

Я думаю, что проблема может быть вызвана тем, что вы забыли вернуть массив из одной функции и передать его в другую функцию.

Это упрощенный пример того, как это должно быть сделано:

 def one():
    array= [1,2,3,4,5]
    return array

def two(array):
    print(array)

array = one()
two(array)
  

Эта же логика возврата массива и передачи его в другую функцию может использоваться как для переменных, так и для массивов.

Ответ №2:

Я подозреваю, что вы хотите вернуть X и Y из своей функции:

 def Data_to_array(filename_and_path):

    r = int
    x, y=[],[]
    data = []
    line_num = 0
    #call data

    P = open(filename_and_path,'r')
    data = P.readlines()
        #Get it to ignore strings
    for line in data:
        line_num  = 1
        if line.find("[data]") >= 0:
            r = (line_num 1)
            # Data = P.readlines()[:r]     
            # print (Data)
        if "Sampling Rate" in line:
            SR = float(line[15:])
       
        if "temperature=" in line:
            T = float(line[12:18])
            print(str("Temperature = ")) 
            print(T)
    Data = data[r:line_num] 

    #assign data into dataframe
    df = pd.DataFrame(Data)
    #rename column in data
    df = df.rename(columns = {0: 'volts'})
    #get it to recognise the index
    df.index.name = 'Index'
    #get it to recognise the data as number
    df = df.astype({'volts': float})
    #get index to start at 1
    df.index  = 1
    #assign data to lists
    I = df.index.to_list()
    t = df['volts'].to_list()
    #get it to invert data
    y = [element * -1 for element in t]
    #multiply by sampling rate
    x = [element /(SR) for element in I]
    return x, y

def Plot_Data (filename_and_path):
    #assign data to X array
    X, Y = Data_to_array(filename_and_path)
    #assign data to Y array
    #Plot graph
    plt.plot(X,Y)