在函数

时间:2017-03-16 13:56:23

标签: python variables scope global-variables

我试图遍历一个函数并使用在程序主范围内定义的变量,但由于某种原因,它没有传递给我的函数。这是我第一次在Python中使用函数和变量作用域,我在这里阅读了Python文档以及一些不同的帖子,但似乎无法弄清楚我做错了什么。

该函数将是递归的,因此我无法在函数的头部定义它们,否则它将每次重新定义。我尝试在我的文件中执行this帖子中的操作,但它似乎无法正常工作。

我在一个文件中都有main +函数,并在我想要使用的函数中定义了我希望用作全局变量。

lv1Count = 12
lv2Count = 14
lv3Count = 18
lv4Count = 4
AL = []

def opt(target):
    global lv4Count
    global lv3Count
    global lv2Count
    global lv1Count
    global AL
    goal = target

    if (goal <= 0 & lv4Count < 0):
        pass
    if (goal <= 1 & lv1Count < 0):
        pass
    if (goal == 2 & lv2Count < 0):
        pass
    if (goal == 3 & lv3Count < 0):
        pass
    if (goal == 4 & lv4Count < 0):
        pass

opt(4)

我用pass替换了所有if语句以避免过多的代码,但实质上每当从这些语句返回一些内容时,使用计数器的比较都不起作用,因为它没有成功读取这个值变量和功能都没有发生。

1 个答案:

答案 0 :(得分:1)

你的功能正常工作:这确实是你如何使用全局变量,即使它通常是一个坏主意。 (在递归中,最常见的是将必要的值作为参数传递给函数。)如果你包含了关于你想要做什么类型的递归的更多细节,我可以帮助你。

In [1]: v = 1

In [2]: def test():
   ...:     global v
   ...:     return v
   ...:

In [3]: test()
Out[3]: 1

问题在于您的if语句:您使用的是按位&而不是普通的逻辑运算符and。由于&首先按操作顺序进行评估,因此您遇到了问题。考虑:

In [1]: bool(1 == 1 & 2 == 2)
Out[1]: False

为什么呢?因为这被评估为:

In [1]: bool(1 == (1 & 2) == 2)
Out[1]: False

与以下内容相同:

In [1]: bool(1 == 0 == 2)
Out[1]: False
相关问题