#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()
поэтому я решил оставить ее. Наверное, мне следовало добавить предупреждение об этом. Спасибо!