在函数中更改全局变量 [英] Changing global variables within a function

查看:131
本文介绍了在函数中更改全局变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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.

您可以使intfloat的此功能更通用,如下所示:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆