Есть ли способ «извлечь» переменную возвращаемого значения из функции и использовать ее в другом месте, не вызывая исходную функцию?

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

У меня есть основной файл (первоначально запускающий программу), вступительный файл (для вводной части, получения имени пользователя и где я пытаюсь «извлечь» переменную user_name), файл функций, в котором хранятся многочисленные функции для событий, которые я можно использовать снова и снова, например time.sleep и «YOU DIED», а затем 5 файлов «содержания истории», которые вызываются основным файлом на основе случайно сгенерированного числа от 1 до 5.

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

Вот результат той части, для которой я хочу использовать имя пользователя: Вывод программы

И вот соответствующий код: Код, о котором идет речь

def left_hallway_survival_success():
    from intro import intro
    user_name = intro()
    # Successful hidden passage code for hidden passage random event function    
    functions.time_sleep(3, "You break into a sprint and carefully dodge each pendulum and make it to the other side.\n")
    functions.time_sleep(4, "As you approach the door, you step on a pressure plate and all the pendulums slowly stop swinging.\n")
    functions.time_sleep(4, "They lift up into the ceiling, out of sight.\n")
    functions.time_sleep(3, "You wonder how this is possible, but turn around and continue on.\n")
    functions.time_sleep(5, "Before you stands the door. You're unaware of what is on the other side.\n")
    functions.time_sleep(4, "You carefully grasp the handle and open it slowly. The hinged creak as you do this as the door appears to be very old.\n")
    functions.time_sleep(5, "Inside the door is yet another room. Quite smaller than the one you were just in.\n")
    functions.time_sleep(5, "In the center of the room you notice what appears to be a marble rectangle of some sort.\n")
    functions.time_sleep(5, "The room appears to be some sort of crypt, with a casket.\n")
    functions.time_sleep(3, "You open the lid.\n")
    functions.time_sleep(5, "As the lid slowly scraped across the top of it, you feel a cold breeze escape the casket.\n")
    functions.time_sleep(3, "Chills run down your spine.\n")
    functions.time_sleep(4, "You then look around the room and notice a sign above the casket.\n")
    functions.time_sleep(3, "It reads:\n")
    # Make the name of the sign say the user's name somehow
    functions.time_sleep(1, user_name + "\n")
    #print ("User name - " + intro.intro() + " - from intro file function in main")


    functions.time_sleep(3, "1845-1862\n")
    functions.time_sleep(4, "From the looks of the tomb, he seemed to be a wealthy man...\n")

Вот код вступительного файла:

def intro():
    import functions
    
    
    functions.time_sleep(2, "")
    functions.time_sleep(3, "Welcome to this awesome program!")
    functions.time_sleep(2, "This program generates a random interactive story!")
    functions.time_sleep(3, "Enjoy and have fun :)")

    
    user_name = input("Please enter your name: ").capitalize()
    print("Hello " + user_name + "!")
    
    #Return user name value from function
    return user_name

Я попробовал добавить

from intro import intro
user_name = intro()

functions.time_sleep(1, "the user's name is: " + user_name)

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

user_name = intro()

В верхней части файла импорт находится перед функциями, но произошло то же самое, а также ошибки «имя_пользователя не определено».

Нет. Логически разделяйте свои шаги. Если получение имени пользователя — это один шаг, сделайте его отдельным шагом, чтобы вы могли выполнять его независимо от других фрагментов кода.

deceze 02.08.2024 09:22

Этот вопрос похож на: Как использовать глобальную переменную в функции?. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.

Konstantin Kotenko 02.08.2024 10:17

Вам необходимо понимать глобальные переменные и локальные переменные (которые теряются при выходе из функции). Какой смысл в функции intro(), если она вызывается только один раз? Кстати, операторы импорта лучше всего размещать в начале файла, а не внутри кода функции.

user19077881 02.08.2024 10:51

Добро пожаловать в Stack Overflow! Пожалуйста, возьмите экскурсию . При написании вопроса здесь код должен представлять собой примерную версию вашего кода, а не реальный код, потому что мы хотим сосредоточиться на проблеме и не вдаваться в массу ненужных деталей. Пожалуйста, сделайте минимально воспроизводимый пример . Любой соответствующий текст необходимо предоставлять в виде текста, а не картинки . Если вам нужны дополнительные советы, посмотрите Как спросить . Вы можете редактировать.

wjandrea 02.08.2024 18:38
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть способы. Первый способ — объявить user_name глобальным. Но в целом это не поощряется. Таким образом, вы можете разделить на несколько функций.

Использование глобальной переменной:

user_name = input()    

def func_1():
    return f'Hello {user_name}'
def func_2():
    return f'Your {user_name} seems to be familiar'

Разделение на несколько функций:

def call_uname():
    user_name = input()
    return user_name    

def func_1():
    return f'Hello {call_uname()}'
def func_2():
    return f'Your {call_uname()} seems to be familiar'

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

dct = {}
def fun_1():
    place = input('where are you from')
    dct['place'] = place
    # Do something

def fun_2():
    return f'wow! I am also from {dct['place']}'

fun_1()
fun_2()

Думаю, мое объяснение понятно.

Другие вопросы по теме