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

时间:2019-08-24 11:09:15

标签: python-3.x variables python-module

我是Python的新手,对我做错的事情迷茫了。我正在尝试使用返回给调用方main()的 fqdn 变量,但是我却得到了NameError: name 'fqdn' is not defined

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

如果模块中的函数返回一个值,并且调用方是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)

1 个答案:

答案 0 :(得分:1)

简短说明

是的,main()应该能够使用返回的值,但是返回的只是值,而不是变量名。您必须定义自己的名称的变量,以接收该值,然后改用它。

详细说明

任何函数中变量的名称只是一个“标签”,仅在此函数的范围内有效。函数是抽象,意思是“给我一些输入,我会给您一些输出”。在函数中,您需要以某种方式引用输入,并可能分配一些其他变量以执行您想要执行的操作。这些变量名称在功能之外没有任何意义,除了最多传达一些有关该功能的预期用途的信息。

当函数返回值时,它不返回变量的“名称”。仅变量的值(或内存中的引用)。您可以在调用函数时定义自己的变量,给它起自己的名字,然后为它分配函数的返回结果,因此只需编写:

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变量的定义位置。

为确保您已正确理解这一点,请记住:

  • 您可以在同一文件中拥有多个函数,并在所有这些函数中使用名称相同的变量,这将是没有问题的,因为变量(具有其名称)仅存在于每个特定的函数范围内。

  • 变量名不会“跨越”范围的边界,仅变量值/引用会使用,为此,使用了一种特殊的构造,即return [something]语句。