Как использовать значение переменной во всех функциях в одном файле с помощью python 3.x

#python #python-3.x

Вопрос:

У меня есть функция, которая требует ввода данных пользователем и сохранения ее в переменной. Теперь, когда я хочу использовать эту переменную в других функциях, я должен сначала выполнить input() функцию и, следовательно, снова должен предоставить входные данные. Возможно ли, что я могу использовать переменную get_input в других функциях также без выполнения input() функции или повторного ввода? Я попытался объявить переменную global также, но безрезультатно.

возможно ли это?

 def input():
    get_input = str(input("please provide name"))
    return get_input

def output():
    val = input() # it is executing the function input() and hence need to prvoide input

def getvalue():
    val = input() # it is executing the function input() and hence need to provide input
 

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

return делает функцию выполняемой каждый раз, и, следовательно, ввод должен предоставляться каждый раз

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

1. определите get_input вне функции и global get_input вверху в каждой функции

2. «не можем ли мы сохранить значение ввода в одной переменной и использовать его во всех функциях в файле?» — Да, ты можешь. Просто сделать это?

3. Примечание: не называйте свои функции по имени встроенных функций Python (определение собственной функции input , а затем использование встроенной input функции внутри этой функции действительно не лучшая идея)

4. return is making function to execute every time . Это неправда. Он выполняется каждый раз, потому что он вызывается каждый раз.

Ответ №1:

Здесь вы можете использовать глобальные переменные. Вы можете вводить данные за пределами всех функций и получать переменную в функции с помощью глобальной функции. Ниже приведен пример кода для вашей проблемы:-

 get_input = str(input("please provide name"))

def a_input():
    global get_input
    print(get_input, "a")

def output():
    global get_input
    print(get_input, "b")

def getvalue():
    global get_input
    print(get_input, "c")
    
a_input()
output()
getvalue()
 

Ниже приведен вывод этого кода

 please provide nameadeel
adeel a
adeel b
adeel c
 

Ответ №2:

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

cachedinput.py (определяет функцию)

 from functools import partial, cache

getname = cache(partial(input, 'please provide name: '))
 

usecachedinput.py (функция вызовов)

 from cachedinput import getname

print(getname())
print(getname())
print(getname())
print(getname())
print(getname())
 

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

Если использование functool.partial здесь немного слишком загадочно. Он может быть реализован как функция с cache использованием в качестве декоратора.

 @cache
def getname2():
    return input('please provide name: ')
 

Ответ №3:

Прежде всего, не определяйте свою первую функцию как input . Это вызовет проблемы, потому что уже существует функция с таким именем. Предполагая , что вы назовете это как-то так str_input , одним из вариантов было бы создать get_input глобальную переменную примерно так:

 get_input = None # set get_input to None so that you can tell of input has been asked for yet

def my_input():
    global get_input # make sure Python knows this is a global variable, not a local one
    get_input = input("please enter your name") # no need for str() here, input gives a string by default
    return get_input

def output():
     global get_input # make sure Python knows this is a global variable, not a local one
     if get_input is None: # we haven't asked for input yet
         val = my_input() # get some input
     else: # we have input already
        val = get_input # just get the original value

# the same for getvalue():

def getvalue():
     global get_input # make sure Python knows this is a global variable, not a local one
     if get_input is None: # we haven't asked for input yet
         val = my_input() # get some input
     else: # we have input already
        val = get_input # just get the original value

 

Ответ №4:

Хорошо, значит, вы пытаетесь заставить функцию Input изменить значение «get_input» правильно? Вы также пытаетесь получить значение и другими методами. Вы могли бы сделать это, определив его вне метода следующим образом:

 get_input=0

def Input():
    global get_input
    get_input = str(input("please provide name: "))
    return get_input

def output():
    global get_input
    val = get_input
    return val

def getvalue():
    global get_input
    val = get_input
    return val

test=Input()
print(test   "t"   get_input   "t"   getvalue()   "t"   output())
 

Теперь, если вы укажете, например, «Привет, мир», вывод в примере кода, который я опубликовал, будет «Привет, мир, Привет, мир, Привет, мир», который является значением для get_input. Кроме того, ввод-это встроенный метод, поэтому я изменил ваш на «Ввод».

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

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

2. Я попробовал ваш подход, и он все еще дает мне ошибку get_input не определена

3. @Enigmaderockz не могли бы вы предоставить свой код, пожалуйста?

4. @blackbrandt это просто для демонстрационных целей.

Ответ №5:

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

 def input():
    get_input = str(input("please provide name"))
    return get_input

my_input = input()

def output(my_input):
    val = my_input

def getvalue(my_input):
    val = my_input
 

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

Однако, пожалуйста, обратите внимание, что ввод уже является функцией в python, и не рекомендуется создавать функцию под названием ввод, так как это приведет к ошибкам и ошибкам.

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

1. TypeError: input() takes 0 positional arguments but 1 was given .

2. @ThierryLathuille это потому, что у пилота-чувака проблема в коде. input является встроенным, но он также определен в первом определении функции. Таким образом, python видит только локальное определение перед обычным определением. Это было бы исправлено, если бы он использовал другое имя, отличное от встроенной функции.

3. @blackbrandt я знаю, спасибо за подробное объяснение. Вот почему всегда полезно протестировать код, прежде чем публиковать его в качестве ответа! 😉

4. @blackbrandt да, я знаю, что просто пользователь создал эту функцию, input() поэтому я решил оставить ее. Наверное, мне следовало добавить предупреждение об этом. Спасибо!