2012-02-11 6 views
0

다음 함수를 작성했습니다. 변수는 input_name입니다. 사용자는 input_name에 할당 된 값을 입력합니다. 기능 밖에서 input_name에 액세스 할 수있는 가장 좋은 방법을 알고 싶습니다. 함수 내에서 변수를 전역 변수로 정의한다는 것은 함수 밖에서 변수를 사용할 수 있음을 의미합니다. 그러나이 경우 변수는 실제로 함수의 매개 변수이므로 전역 변수로 정의하는 방법을 모르겠습니다. 나는이 어떤 도움을 주셔서 감사합니다, 아래 문제의 코드를 찾을하십시오파이썬 함수 매개 변수를 전역 변수로 사용

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 = '다시 시도하십시오 :''- 아마'input_name'이 아닌'prompt'를 설정하고 싶을 것입니다. – poke

답변

10

가장 간단한 것은 값을 반환 할 수 있으며, 함수 외부로 할당합니다 :

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

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

+1 함수에서 정보를 얻는 방법은 반환 값을 사용하는 것입니다. 나는 왜 그렇게 많은 사람들이 그렇게 단순한 개념에 저항하는지 이해하지 못한다. –

+2

@KarlKnechtel 그들이 그것에 저항하는 것은 아닙니다. 많은 파이썬 초보자가 return 문을 실제로 이해하지 못한다는 것을 발견했습니다. REPL은 기본적으로 반환 값을 출력하기 때문에 일부는 인쇄물과 다르게 보지 않습니다. Guido van Rossum이 게시 한이 토론을 참조하십시오. https://plus.google.com/115212051037621986145/posts/NJnmxZkrE4J 나는 함수가 단순한 코드 블록이나 레이블로 간주되고 입력이 주어지면 반환하는 프로 시저가 아니라고 생각합니다. . 기본적인 프로그래밍 개념은 대부분의 파이썬 튜토리얼에서 가르쳐지지 않습니다. – Anorov

+0

도움을 주셔서 감사합니다. 그래서 만약 함수 안에'return input_name'을 쓰면 함수 밖에서'print input_name'을 말할 수 있어야합니까? 현재 프로그램은 0을 반환하고 있습니다 (변수를 0으로 초기화했기 때문에). –

1

당신이 원하는 것은 do는 아마 나쁜 습관이다. input 함수에서 input_name을 반환하십시오.

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

감사합니다, Elijaheac. Tom이 요구 한 것이 아니지만, 귀하의 응답은 저에게 매우 유용했습니다. 내가 틀렸다면 나를 바로 잡으십시오. 그러나 이것은 함수 인수와 같은 이름을 가진 모듈 변수의 값을 설정하는 좋은 방법이라고 생각합니다. 인수와 모듈 변수에 대해 다른 이름을 사용하여이 작업을 수행했지만 지금부터는 제안을 사용합니다. – bmello

관련 문제