在函数中定义变量范围

2024-04-19 23:50:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图循环一个函数并使用在程序主作用域中定义的变量,但由于某些原因,它没有传递到我的函数中。这是我第一次在Python中使用函数和变量作用域,我仔细阅读了Python文档以及这里的一些文章,但似乎无法找出我做错了什么。你知道吗

这个函数将是递归的,因此我不能在函数的头部定义它们,否则每次都会重新定义。我试着在我的文件中执行thispost中所做的操作,但似乎不起作用。你知道吗

我在一个文件中有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语句以避免过多的代码,但是基本上每当从这些语句返回一些东西时,使用计数器的比较就不起作用,因为它没有成功地读取这个变量的值,并且功能也没有出现。你知道吗


Tags: 文件函数targetif定义pass作用域global
1条回答
网友
1楼 · 发布于 2024-04-19 23:50:45

您的函数工作正常:这确实是您使用全局变量的方式,尽管这通常是个坏主意。(在递归中,最常见的方法是将必要的值作为参数传递给函数。)如果您提供了有关要执行哪种递归的详细信息,我可以提供帮助。你知道吗

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

相关问题 更多 >