2012-02-11 76 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 2012-02-11 18:45:55

回答

10

最簡單的事情將要返回的值,並將其分配功能外:

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

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

+1從函數中獲取信息的方式是通過返回值。我不明白爲什麼這麼多人對這樣一個簡單的概念如此抗拒。 – 2012-02-11 20:50:41

+2

@KarlKnechtel這並不是說它們對它有抵抗力。我發現很多Python初學者不太瞭解return語句。有些人認爲它與打印不同,因爲REPL默認打印返回值。在這裏看到這個討論,由Guido van Rossum發表:https://plus.google.com/115212051037621986145/posts/NJnmxZkrE4J 我認爲他們看到的功能更簡單的代碼塊或標籤,而不是程序,當給定的輸入時返回的東西。大多數Python教程都沒有教授這種基本的編程概念。 – Anorov 2012-02-11 22:12:48

+0

感謝您的幫助。所以如果我在函數內部返回'input_name',那麼我應該能夠在函數之外聲明'print input_name'?目前該程序剛剛返回0(因爲我初始化變量爲0)。 – 2012-02-12 00:39:18

1

要什麼這可能是一種不好的做法。從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。雖然這不是湯姆所要求的,但你的迴應對我來說非常有用。如果我錯了,請糾正我,但我相信這是設置模塊變量的值與函數參數同名的好方法。我一直在爲參數和模塊的變量命名,但從現在開始使用您的建議。 – bmello 2017-01-05 17:42:11