我试图遍历一个函数并使用在程序主范围内定义的变量,但由于某种原因,它没有传递给我的函数。这是我第一次在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语句以避免过多的代码,但实质上每当从这些语句返回一些内容时,使用计数器的比较都不起作用,因为它没有成功读取这个值变量和功能都没有发生。
答案 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