我是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)
答案 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)
我不知道uuid
和sid
变量的定义位置。
为确保您已正确理解这一点,请记住:
您可以在同一文件中拥有多个函数,并在所有这些函数中使用名称相同的变量,这将是没有问题的,因为变量(具有其名称)仅存在于每个特定的函数范围内。
变量名不会“跨越”范围的边界,仅变量值/引用会使用,为此,使用了一种特殊的构造,即return [something]
语句。