更改函数内的全局变量

Sch*_*ack 1 python variables global local

我是编程新手,我正在寻找一些关于该怎么做的建议.我正在尝试编写的程序需要用户输入几个数字.我想使用一个函数来测试用户是否为输入的每个值输入一个数字.如果输入不是数字,我希望函数在输入数字之前不断询问数字.我想知道是否有更好的方法将值传递给全局变量,而不是将函数中的每个变量明确声明为全局变量.我不确定是否有更好的方法来做到这一点......

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: ")
Run Code Online (Sandbox Code Playgroud)

jam*_*lak 5

只需使它成为一个函数,返回一些东西而不是操纵全局,更容易维护!

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
Run Code Online (Sandbox Code Playgroud)

而不是像numTest(cellSize, "Enter cell size: ")你提到的那样,你应该这样做cellSize = get_num("Enter cell size: ").返回值是更好的做法.

你可以使这个功能更通用,int并且float如此:

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."
Run Code Online (Sandbox Code Playgroud)

现在你也可以:

x = get_num("test") # normal int
x = get_num("foo", float)
Run Code Online (Sandbox Code Playgroud)