gpt4 book ai didi

python - 在函数中定义变量范围

转载 作者:太空宇宙 更新时间:2023-11-03 15:32:04 25 4
gpt4 key购买 nike

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

最佳答案

您的函数工作正常:这确实是您使用全局变量的方式,尽管这通常是一个坏主意。 (在递归中,最常见的是将必要的值作为参数传递给函数。)如果您包含有关您想要执行的递归类型的更多详细信息,我可以提供帮助。

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

关于python - 在函数中定义变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42836138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com