在函数中更改全局变量 [英] Changing global variables within a function
问题描述
我是编程的新手,我正在寻找有关操作的建议.我尝试编写的程序将需要用户输入多个数字. 我想使用一个函数来测试用户是否为输入的每个值输入数字.如果输入的不是数字,则我希望该功能在输入一个数字之前一直要求输入一个数字.我想知道是否有更好的方法将值传递给全局变量,而不是将函数中的每个变量明确声明为全局变量.我不确定是否有更好的方法可以做到这一点...
I'm new to programming, and I'm looking for some advice on what to do. The program I'm trying to write will need several numbers from the user. I want to use a function to test if the user input a number or not for each of the values entered. If the input isn't a number, I want the function to keep asking for a number until one is entered. I want to know if there is a better way to pass the value into a global variable other than explicitly declaring each variable in the function as global. I'm unsure if there is a better way to do this...
rowNum = None
def numTest(c, d):
x = False
while x is not True:
try:
c = raw_input(d)
c = float(c)
x = True
except:
print "The value you entered isn't a valid number, please try again."
global rowNum
rowNum = c
numTest(rowNum, "Enter number of rows: ")
print rowNum
# I want to use the numTest function on several variables...
# e.g.
# numTest(contourLevel, "Enter number of contour levels: ")
# numTest(cellSize, "Enter cell size: ")
# numTest(labelSize, "Enter label size: ")
推荐答案
只需使其成为一个函数即可,它返回的是某些内容,而不是操作全局的,更易于维护!
Just make it a function, that returns something instead of manipulating a global, much easier to maintain!
def get_num(msg):
while True:
try:
return int(raw_input(msg)) # number of rows should be int
except ValueError:
print "The value you entered isn't a valid number, please try again."
num_rows = get_num("Enter number of rows: ")
print num_rows
不是您提到的numTest(cellSize, "Enter cell size: ")
之类的东西,
您应该在做cellSize = get_num("Enter cell size: ")
.最好是返回值.
Instead of something like numTest(cellSize, "Enter cell size: ")
which you mentioned,
you should be doing cellSize = get_num("Enter cell size: ")
. It's better practice to return values.
您可以使int
和float
的此功能更通用,如下所示:
You could make this function more general for int
and float
like so:
def get_num(msg, type_=int):
while True:
try:
return type_(raw_input(msg))
except ValueError:
print "The value you entered isn't a valid number, please try again."
现在您还可以:
x = get_num("test") # normal int
x = get_num("foo", float)
这篇关于在函数中更改全局变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!