2012-02-11 4 views
0

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

def input(input_name, prompt): 
    while True: 
     data = raw_input(prompt) 
     if data: 
      try: 
       input_name = int(data) 
      except ValueError: 
       print 'Invalid input...' 
      else: 
       if input_name >= 0 and input_name < 100: 
        print 'Congratulations' 
        break 
       input_name = 'Please try again: ' 
     else: 
      print 'Goodbye!' 
      break 

month = 0 
day = 0 
year = 0 
century = 0 

input(month, "Please enter the month (from 1-12, where March is 1 and February is 12): ") 
input(day, "Please enter the day (from 1-31): ") 
input(year, "Please enter the year (from 0 - 99, eg. 88 in 1988): ") 
input(century, "Please enter the century (from 0 - 99, eg. 19 in 1988): ") 

A = month 
B = day 
C = year 
D = century 
+1

На стороне примечания: 'input_name = 'Повторите попытку:'' - Вероятно, вы хотите установить 'prompt', а не' input_name'. – poke

ответ

10

Проще всего было бы вернуть значение, и назначить его вне функции:

def my_input(prompt): 
    #.. blah blah.. 
    return the_value 

month = my_input("Please enter the month") 
# etc. 
+1

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

+2

@KarlKnechtel Это не значит, что они устойчивы к этому. Я обнаружил, что многие начинающие Python действительно не понимают оператор return. Некоторые из них не видят его как отличного от печати, потому что REPL печатает значения по умолчанию. См. Эту дискуссию здесь, опубликованную Guido van Rossum: https://plus.google.com/115212051037621986145/posts/NJnmxZkrE4J Я думаю, что они больше видят функции как простые кодовые блоки или метки, а не процедуры, которые возвращают что-то при вводе данных , Эта базовая концепция программирования не преподается в большинстве учебных пособий Python. – Anorov

+0

Спасибо за помощь здесь. Итак, если я возвращаю input_name' внутри функции, тогда я должен быть в состоянии сказать 'print input_name' вне функции? В настоящее время программа просто возвращает 0 (поскольку я инициализировал переменные как 0). –

1

То, что вы хотите вероятно, это плохая практика. Просто верните input_name из функции input.

def input(param1,param2): 
    return value 

value = input(param1,param2, ...) 
3

Другие люди говорят что-то вроде этого:

def input(prompt): 
    return value 

value = input(param1,param2, ...) 

И это то, что вы действительно хотите делать, но только так вы знаете, вы можете использовать глобальные() для изменения глобальных переменных:

def input(input_name, prompt): 
    globals()[input_name] = value 
+0

Спасибо, Eliahheac. Хотя это не то, о чем просил Том, ваш ответ был очень полезен для меня. Пожалуйста, исправьте меня, если я ошибаюсь, но я считаю, что это хороший способ установить значение переменной модуля с тем же именем, что и аргумент функции. Я делаю это, имея другое имя для аргумента и для переменной модуля, но отныне буду использовать ваше предложение. – bmello

Смежные вопросы