为什么我不能访问从函数返回的变量?

Why can't I access a variable that's being returned from a function?

我是 Python 的新手,我不知道自己做错了什么。我正在尝试使用返回给调用者的 fqdn 变量,它是 main() 但我得到 NameError: name 'fqdn' is not defined

我敢打赌这是某种类型的全局变量语句问题或类似问题,但我一直在研究这个问题,但无法弄清楚。

如果来自模块的函数 returns 一个值,并且调用者是 main(),main() 不应该能够使用该返回值吗???

布局如下:

asset.py

def import_asset_list():
    # Open the file that contains FQDNs
    openfile = open(r"FQDN-test.txt")

    if openfile.mode == 'r':
        # Remove CR from end of each item
        fqdn = openfile.read().splitlines()

        # Add https to the beginning of every item in list
        fqdn = ["https://" + item for item in fqdn]        

        openfile.close()        

        return fqdn

tscan.py

def main():
    import asset
    asset.import_asset_list()

    # Iterate through list
    for i in fqdn:
        if SCHEDULED_SCAN == 1:
            create_scheduled_scan(fqdn)
            launch_scan(sid)
            check_status_scan(uuid)    
        else:
            create_scan(fqdn)
            launch_scan(sid)
            check_status_scan(uuid)

简短说明

是的,main() 应该可以使用 returned 值,但它只是 returned 的值,而不是变量名。你必须定义一个你自己名字的变量来接收值,然后使用它。

详细说明

任何函数内的变量名只是一个"label"仅在该函数范围内有效。函数是一个抽象,意思是"Give me some input(s), and I will give you some output(s)"。在函数中,您需要以某种方式引用输入,并可能分配一些额外的变量来执行您想要执行的任何操作。这些变量名在函数之外没有任何意义,除了最多传达一些关于函数预期用途的信息。

当函数 return 是一个值时,它不会 return 变量的 "name"。只有变量的值(或内存中的引用)。您可以在调用函数的地方定义自己的变量,给它自己的名字并将函数的 returned 结果分配给它,因此您只需编写:

def main():
    import asset
    my_asset_list = asset.import_asset_list()

    # Iterate through list
    for i in my_asset_list:
        if SCHEDULED_SCAN == 1:
            create_scheduled_scan(my_asset_list)
            launch_scan(sid)
            check_status_scan(uuid)    
        else:
            create_scan(my_asset_list)
            launch_scan(sid)
            check_status_scan(uuid)

我不知道 uuidsid 变量是在哪里定义的。

为确保您已正确理解此内容,请记住:

  • 您可以在同一个文件中有多个函数,并在所有这些函数中使用同名变量,这不会有问题,因为一个变量(及其名称)只存在于每个特定函数中范围。

  • 变量名不"cross"范围的边界,只有变量values/references,为此,使用了一个特殊的结构,即return [something]声明。