Как запустить переменную одной функции в другую в python?

#python #function #oop #google-colaboratory #user-defined-functions

Вопрос:

Я новичок. У меня есть две функции: 1-я создаю фреймы данных и некоторые инструкции для печати, 2-я загружаю фреймы данных в csv в colab.

Я хочу загрузить все кадры данных по имени df_name. код:

 def fun1():
  import pandas as pd
  d = {'col1': [1, 2], 'col2': [3, 4]}
  d2 = {'col1': [-5, -6], 'col2': [-7, -8]}
  df = pd.DataFrame(data=d)
  df2 = pd.DataFrame(data=d2)
  print('info', df.info())
  print('info', df2.info())
  return df, df2
def fun2(df):
  from google.colab import files
  name1 = 'positive.csv'
  name2 = 'negative.csv'
  df.to_csv(name1)
  df2.to_csv(name2)
  files.download(name1)
  files.download(name2)
 
 fun2(df) #looking something like this that download my df, func2 should read my df and df2 from fun1() 
 

Я пытался:

 class tom:
  def fun1(self):
    import pandas as pd
    d = {'col1': [1, 2], 'col2': [3, 4]}
    d2 = {'col1': [-5, -6], 'col2': [-7, -8]}
    df = pd.DataFrame(data=d)
    df2 = pd.DataFrame(data=d2)
    print('info', df.info())
    print('info', df2.info())
    self.df= df
    self.df2 = df2
    
    return df, df2
 
  def fun2(self):
    df,df2 = fun1()
    from google.colab import files
    name1 = 'positive.csv'
    name2 = 'negative.csv'
    df.to_csv(name1)
    df2.to_csv(name2)
    return files.download(name1) ,files.download(name2)
 
 tom().fun2() #it download files but shows print of fun1 as well which I don't want. 

 

ищу что-то вроде

 tom().fun2(dataframe_name) #it just download the files nothing else

 

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

1. «также показывает печать fun1, которую я не хочу» — вы должны написать дополнительный код, fun1 который позволит вызывающему абоненту решить, печатать что-либо или нет. Прямо сейчас функция всегда будет печатать материал, и вызывающий абонент в основном не контролирует это (вы могли бы перенаправить stdout куда-нибудь, но это не стоит хлопот).

2. Добавьте параметр в fun1 like print_info=True , а затем fun2 при вызове fun1 включите значение параметра like print_info=False ? Или множество других способов решения проблемы печати информации только в некоторых случаях

3. есть ли какой-либо другой способ в fun2 (), чтобы он считывал df1 и df2 из fun1() ?

Ответ №1:

установите постоянные переменные непосредственно в классе, если он не изменится, и

определите удовольствие только для действий.

 class s:
  import pandas as pd
  
  d = {'col1': [1, 2], 'col2': [3, 4]}
  d2 = {'col1': [-5, -6], 'col2': [-7, -8]}
  df = pd.DataFrame(data=d)
  df2 = pd.DataFrame(data=d2)


  name1 = 'positive.csv'
  name2 = 'negative.csv'
  df.to_csv(name1)
  df2.to_csv(name2)
  def f():
    print('info', df.info())
    print('info', df2.info())
  
  def fun(x):
    from google.colab import files
    return files.download(x)
 

бежать

 s.f() --it will print value only
s.fun(s.name1) --it will just download the file
 

Ответ №2:

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

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

1. можете ли вы написать это в классе, пожалуйста