作为全局变量的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
最简单的事情将要返回的值,并将其分配功能外:
def my_input(prompt):
#.. blah blah..
return the_value
month = my_input("Please enter the month")
# etc.
+1从函数中获取信息的方式是通过返回值。我不明白为什么这么多人对这样一个简单的概念如此抗拒。 – 2012-02-11 20:50:41
@KarlKnechtel这并不是说它们对它有抵抗力。我发现很多Python初学者不太了解return语句。有些人认为它与打印不同,因为REPL默认打印返回值。在这里看到这个讨论,由Guido van Rossum发表:https://plus.google.com/115212051037621986145/posts/NJnmxZkrE4J 我认为他们看到的功能更简单的代码块或标签,而不是程序,当给定的输入时返回的东西。大多数Python教程都没有教授这种基本的编程概念。 – Anorov 2012-02-11 22:12:48
感谢您的帮助。所以如果我在函数内部返回'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
谢谢,Elijaheac。虽然这不是汤姆所要求的,但你的回应对我来说非常有用。如果我错了,请纠正我,但我相信这是设置模块变量的值与函数参数同名的好方法。我一直在为参数和模块的变量命名,但从现在开始使用您的建议。 – bmello 2017-01-05 17:42:11
附注:'input_name ='请再试一次:'' - 您可能想要在那里设置'prompt',而不是'input_name'。 – poke 2012-02-11 18:45:55