假设:
PICKLE_FILENAME_INSTRUCTION_IDS = 'pickled_instruction_ids.txt'
def compare_instruction_id_list_with_baseline(baselineidspicklefile):
baseline_ids = load_pickled_ids(baselineidspicklefile)
current_main_url_content = get_page_content(main_url_test)
root = lh.fromstring(current_main_url_content)
current_ids = get_instruction_ids(root)
diff = [id for id in current_ids if id not in baseline_ids]
return diff
其中baselineidspicklefile
是ids的基线(list
),腌制。
稍后在代码中,我会检查diff
,如果它不为空,我会对新的ID(current_ids
)执行某些操作。现在,我意识到如果diff非空,我还希望通过pickle用新的diff列表覆盖基线id,使其成为新的基线。
current_ids
是此功能的本地。所以我不能只从程序的主要部分调用pickle.dumps()
。我不想从函数中返回diff
和 current_ids
。显然,我宁愿不让current_ids
全球化。
我有什么选择来访问这两个变量?
注意:这是我遇到的一般问题 - 我在使用urllib2时也会遇到它,例如在执行以下操作的函数中:
response = urllib2.urlopen(url)
content = response.read()
我通常会返回content
,因此我可以执行lxml.html.fromstring(content)
之类的操作,但后来我意识到程序中的后续内容需要访问response
,而且我被卡住了,因为那不是我回来的。
答案 0 :(得分:4)
您可以使用内置locals()
功能:
PICKLE_FILENAME_INSTRUCTION_IDS = 'pickled_instruction_ids.txt'
def compare_instruction_id_list_with_baseline(baselineidspicklefile):
baseline_ids = load_pickled_ids(baselineidspicklefile)
current_main_url_content = get_page_content(main_url_test)
root = lh.fromstring(current_main_url_content)
current_ids = get_instruction_ids(root)
diff = [id for id in current_ids if id not in baseline_ids]
return locals()
然后,您可以使用返回值来使用compare_instruction_id_list_with_baseline
中定义的所有变量,然后在括号中使用定义所需变量的字符串。例如,return_value = compare_instruction_id_list_with_baseline(...)
diff = return_value['diff']
。