作为全局变量的Python函数参数

问题描述:

我写了以下函数,它需要一个变量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

最简单的事情将要返回的值,并将其分配功能外:

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

要什么这可能是一种不好的做法。从input函数返回input_name

def input(param1,param2): 
    return value 

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

其他人都在说这样的事情:

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