Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何避免声明全局变量?_Python_Global Variables - Fatal编程技术网

Python 如何避免声明全局变量?

Python 如何避免声明全局变量?,python,global-variables,Python,Global Variables,我是Python新手。我写了这段代码,但听说声明全局变量不是一个好做法。在这种情况下,编写此函数的正确方法是什么 index = 0 def level_selection(): global index level = raw_input("Choose the desired level of difficulty: easy, medium or hard") if level.lower() == "easy": return level1

我是Python新手。我写了这段代码,但听说声明全局变量不是一个好做法。在这种情况下,编写此函数的正确方法是什么

index = 0

def level_selection():
    global index
    level = raw_input("Choose the desired level of difficulty: easy, medium or hard")
    if level.lower() == "easy":
        return level1
    if level.lower() == "medium":
        return level2
    if level.lower() == "hard":
        return level3 
    else:
        print "Error"
        index += 1
        if index < 3:
            return level_selection()
        return

level1 = "You selected easy"
level2 = "You selected medium"
level3 = "You selected hard"
index=0
def液位_选择()
全球指数
级别=原始输入(“选择所需的难度级别:容易、中等或难”)
如果level.lower()=“容易”:
返回级别1
如果level.lower()=“中”:
返回级别2
如果level.lower()=“硬”:
返回级别3
其他:
打印“错误”
指数+=1
如果指数<3:
返回级别_选择()
返回
level1=“您选择了轻松”
level2=“您选择了中等”
level3=“您选择了“硬”

另一件事是,如果您确实需要全局变量,则需要一个类成员变量来保存索引

class VARS(object):
    index = 0  
VARS.index += 1
print(VARS.index)
>1

您在本程序上的目的是允许用户输入最多3个错误值

您可以将索引作为参数传递,该参数按用户统计不正确的条目,并通过递归调用函数来保留该值

用这种方法看完整的重写

def level_selection(index):

    level1, level2, level3 = "level1", "level2","level3"

    level = input("Choose the desired level of difficulty: easy, medium or hard")
    if level.lower() == "easy":
        return level1
    if level.lower() == "medium":
        return level2
    if level.lower() == "hard":
        return level3 
    else:
        print("Error")
        index -= 1
        if index > 0:
            return level_selection(index)

    return

print(level_selection(3))

如果您是python新手,我强烈建议您使用python版本3。
python逐行读取代码,这意味着您不能在分配变量之前调用它
全局变量可以在函数和类内部访问,也可以通过其他方式在函数和类内部继承变量,无需使用全局变量。
作为一种良好做法:

  • 如果要使用if语句,请始终尝试使用else语句
  • 将参数传递给函数,以使程序更具动态性,而不是使用静态内容
因此,在您的情况下,代码将是:

index = 0 #global scope

def level_selection(dx):
    my_local_index = dx #creating a new variale

    level1 = "You selected easy" #local variables
    level2 = "You selected medium" # not accessible outside of this scope
    level3 = "You selected hard" 

    level = raw_input("Choose the desired level of difficulty: easy, medium or hard")
    if level.lower() == "easy":
        return level1
    if level.lower() == "medium":
        return level2
    if level.lower() == "hard":
        return level3 
    else:
        print "Error"
        my_local_index += 1
        if my_local_index < 3:
            return level_selection(my_local_index)
        else:
            exit()

# calling the function and passing a argument to it
level_selection(index) 
index=0#全局范围
def液位选择(dx):
my_local_index=dx#创建新变量
level1=“您选择了easy”#局部变量
level2=“您选择了中等”#无法在此范围之外访问
level3=“您选择了“硬”
级别=原始输入(“选择所需的难度级别:容易、中等或难”)
如果level.lower()=“容易”:
返回级别1
如果level.lower()=“中”:
返回级别2
如果level.lower()=“硬”:
返回级别3
其他:
打印“错误”
我的本地索引+=1
如果我的本地索引<3:
返回级别选择(我的本地索引)
其他:
退出()
#调用函数并向其传递参数
级别选择(索引)

Pass
index
作为参数传递给
level\u selection
您可以将索引作为参数传递给函数并将其返回给调用者(我以为您正在寻找替换
level1
(/2/3)的方法,这可能是个好主意)关于另一个问题,请参见本节的函数部分中的封装。谢谢。学习Python语言时,Python 3比Python 2有哪些优势?请在本文中查看类成员变量和全局变量之间的区别及其优势?这取决于您的应用程序,但全局变量会污染您的全局空间。