访问函数中声明的所有变量而不复制

2024-09-23 06:27:45 发布

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

鉴于:

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是id(a list)的基线,pickled

稍后在代码中,我对diff进行检查,如果它不是空的,我会对新的id(current_ids)进行一些操作。不过,现在我意识到,如果diff不是空的,我还希望通过pickle用新的diff列表覆盖基线id,使其成为新的基线

current_ids是这个函数的局部函数。所以我不能从程序的主要部分调用它。我不希望从函数中同时返回diffcurrent_ids。显然,我不想让current_ids全球化。 我访问这两个变量的选项是什么

注意:这是我遇到的一个普遍问题-在执行以下操作的函数中使用urllib2时,我也会遇到这个问题:

response = urllib2.urlopen(url)
content = response.read()

我通常返回content,这样我就可以做lxml.html.fromstring(content)之类的事情,但后来我意识到程序中的一个稍后点将需要访问response,我被卡住了,因为我没有返回


Tags: 函数ididsurlmainresponsediffcontent
1条回答
网友
1楼 · 发布于 2024-09-23 06:27:45

您可以使用内置的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']

相关问题 更多 >