Python 3 - сохранить функцию Return как переменную для последующего многократного использования

1

Я до сих пор довольно новичок в Python и программировании в целом, но, как метод изучения еще нескольких Python и просто возиться с некоторыми реестрами Windows, я начал работать с очень простым экстрактором данных tkinter и Python3.

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

def sw_click():
    sw_path1 = tkinter.filedialog.askopenfilename(initialdir='C:/Users/%s')
    swP_label.config(text=swpath1)
    return sw_path1

Затем мне хотелось использовать данные Return (sw_path1), который является только локальным системным путем, в другую функцию, которая будет вызываться позже. Например:

def swpull_click():
    swinfo = *function_pullkey (sw_path1)   #Using another function 
    Return sw_data    # again as a variable for later use

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

Var1  = sw_path1

Но это становится нерешенной ссылкой вне самой функции

Любая помощь будет принята с благодарностью. Спасибо

**** Обновление Добавление переменной вне функции, например:

    sw_path1 = None

    def software_click():
    global sw_path1
    tkinter.filedialog.askopenfilename(initialdir='')
    softwareP_label.config(text=sw_path1)
        return sw_path1

Не сохраняет переменную, как только она будет получена, она всегда отсутствует.

  • 2
    Я предполагаю, что вы имеете в виду сохранить вашу переменную после завершения процесса. Сохраните переменную во внешней системе хранения, такой как текстовый файл, база данных или облачное решение, или вы можете использовать pickle чтобы сохранить состояние переменной, перезагрузив ее при следующем запуске программы.
  • 0
    Вы имеете в виду как path = sw_click() чтобы позже вы могли использовать print(path) например?
Показать ещё 1 комментарий
Теги:
tkinter
registry

3 ответа

0

Установка переменной в None перед выполнением функции позволяет ее вызвать в функцию с использованием глобальной настройки. Используя глобальную функцию, до тех пор, пока эта переменная обновляется внутри функции, эта глобальная переменная, ранее установленная в None, будет обновлена. Затем он сохраняется для последующего использования, если другая функция или процесс не очистит или не заменит его.

import tkinter
from tkinter import filedialog

root = tkinter.Tk()

# Setting a variable to none, that can be used, updated, etc.
var1 = None

# So here a user would select their file, which would update var 1 from None, to the results
# This can be handy for validations using if statements to show the variable has not been updated
def function_1():
    global var1   # Must be set to global in the function to be able to access var1 and update
    print(var1)
    var1 = tkinter.filedialog.askopenfilename(initialdir='C:')
    print(var1)

# Updating the variable in the manner above allows for it to be updated repeatedly
# Now that updated variable can be used in function2

def function_2():
    print(var1)

button1 = tkinter.Button(root, text="get the path", command=function_1)
button2 = tkinter.Button(root, text="do something with it", command=function_2)

button1.pack()
button2.pack()
root.mainloop()

Три функции печати, используемые (2 в функции 1 и 1 в функции2), будут возвращаться в следующем порядке:

None
C:/Windows/regedit.exe
C:/Windows/regedit.exe

Удаление пресета Var1 = None приводит к запуску скрипта, но при вызове функции 1 будет существовать NameError, NameError: name 'var1' is not defined

Удаление global var1 из global var1, при этом var1 все еще установлен вне None, сценарий все равно будет выполняться, но при использовании функции 1 он выкинет UnboundLocalError: local variable 'var1' referenced before assignment ошибки UnboundLocalError: local variable 'var1' referenced before assignment в первой строке переменная видна в функциях,

0

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

sw_path1 = None

def sw_click():
    # the global keyword stats that a module level variable can be set inside a function
    global sw_path1
    sw_path1 = tkinter.filedialog.askopenfilename(initialdir='C:/Users/%s')
    swP_label.config(text=swpath1)
    return sw_path1

def swpull_click():
    swinfo = *function_pullkey (sw_path1)   #Using another function 
    return sw_data    # again as a variable
  • 0
    Этот метод, кажется, работает, но переменная не обновляется, она сохраняется как None теперь после выполнения
  • 0
    Переменная sw_path1 имеет значение None, когда модуль импортируется или выполняется код sw_path1 = None. Можете ли вы предоставить больше информации о контексте. Код уровня модуля запускается более одного раза?
0

Вам нужно сделать переменную sw_data глобальной переменной. В настоящее время это переменная уровня функции. Для этого объявите переменную вне функции.
Затем вы можете вызвать sw_path1 в любой другой функции

Надеюсь это поможет!

  • 0
    Я думаю, я забыл упомянуть эту часть, я пытался сделать это, используя только переменную снаружи, как в функции, затем в новой строке у меня было что-то вроде Var = sw_path1, но это не хранит его для вызова позже, появляется как неразрешенная ссылка. Нужно ли вернуть этот Return обратно для глобального хранения внутри самой функции, или я что-то упускаю при хранении этого Return глобально?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню