Передать значение переменных из одной функции в другую

как передать значения x_list, y_list из функции get_data_plot в функцию plot, внутри одного класса, чтоб построить график??

class MainWindow(QDialog):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        ...
        # инициализация GUI
        ...

    def get_data_plot(self):        
            url = 'https://api.blockchain.info/charts/market-price'
            params = {'timespan': '10year', 'rollingAverage': '8hours', 'format': 'json'}
            response = requests.get(url, params=params)
            data = response.json()
    
            x_list = []
            y_list = []
            for item in data["values"]:
                x_list.append(datetime.utcfromtimestamp(item['x']))
                y_list.append(item['y'])
            return x_list, y_list
    
        
    def plot(self, x_list, y_list):
            ax = self.figure.add_subplot(111)
            ax.plot(x_list, y_list)
            self.canvas.draw()

Ответы (5 шт):

Автор решения: Эникейщик

вообще-то это самые азы любого языка, но если вы просите именно так, то

plot(get_data_plot())
→ Ссылка
Автор решения: Kers

Еще как вариант:

a, b = get_data_plot()
plot(a, b)

или сразу вызвать в функции

def get_data_plot(self):        
        # Ваш код...
        self.plot(x_list, y_list)
→ Ссылка
Автор решения: Andrew Holovko

Вы можете определить переменные x_list, y_listкак атрибуты класса, далее доставать их в функциях используя атрибут класса self.

Пример кода класса, который вы можете использовать.

class ClassName:
    x_list = []  # ваши переменный в области видимости имен класса
    y_list = []  

    def get_data_plot(self):
        ...  
        self.x_list.append('some data')  # тут добавляете элемент в список
        self.y_list.append('some data')

    def plot(self, x_list, y_list):
        ...
        ax.plot(self.x_list, self.y_list) 
        ...

... - часть кода не переписывал

→ Ссылка
Автор решения: CrazyElf

Ну может тогда так:

def plot(self):
        ax = self.figure.add_subplot(111)
        x_list, y_list = self.get_data_plot()
        ax.plot(x_list, y_list)
        self.canvas.draw()

Вы вообще где и как этот plot вызываете?

→ Ссылка
Автор решения: 0dminnimda

Вызов внутри класса

Если вам надо вызывать функции класса внутри класса, то вам надо написать что-то такое: self.<имя функции>(<аргументы функции>) т.е. всё тоже самое, как с обычными функциями, только добавить self. впереди. Пример:

class Foo:
  def print_test(self):
    print("test")

  def call_print_test(self):
    self.print_test()  # вызов функции внутри класса

Вызов снаружи класса

Если же вы хотите вызвать функции класса снаружи класса, то вам надо будет написать что-то такое: <имя экземпляра класса>.<имя функции>(<аргументы функции>). Пример:

class Foo:
  def print_test(self):
    print("test")

bar = Foo()  # экземпляра класса Foo, имя - bar
bar.print_test()  # вызов функции вне класса

Т.к. у функции print_test аргументов нет, то мы просто пишем () для вызова


Пример реализации

Cоответственно, в зависимости от того, что вы хотите получить, вам надо написать либо self.plot(self.get_data_plot(<аргументы функции>)) либо <имя экземпляра класса>.plot(<имя экземпляра класса>.get_data_plot(<аргументы функции>)).

Я бы это положил в функцию, чтобы получилось:

class MainWindow(QDialog):
    def __init__(self, parent=None):
        ...

    def get_data_plot(self):
        ...
        return x_list, y_list

    def plot(self, x_list, y_list):
        ...

    def create_plot(self):
        self.plot(*self.get_data_plot())


window = MainWindow()
window.create_plot()  # создаётся график

Также не проблема вызвать create_plot внутри класса (self.create_plot())


Дополнительная информация

В функции create_plot я также использовал распаковку с помощью *, т.е. get_data_plot выводит кортеж, и чтобы "раскрыть" его в две переменные, как того требует plot, мы используем *.

Вот доки питона об этом. И статья на русском, для удобства.

Больше информации о классах вы можете увидеть в документации питона
Если вам тяжело работать с английский языком, то вам вводная статься о классах на русском


Ремарка

По-хорошему функции класса надо называть методами, но я опустил это в ответе, для простоты понимания.

→ Ссылка