首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与list( map() )和map()的行为差异

与list( map() )和map()的行为差异
EN

Stack Overflow用户
提问于 2022-04-21 21:58:12
回答 1查看 35关注 0票数 -1

我遇到了一种情况,在测试用户定义的函数时,我观察到了两种不同的结果:retrieve_query_tags。当将map对象分配给contained_tags变量时,将为每个测试方法引发AssertionErrors。

然而,当map对象被胁迫到一个list中,并且该列表被分配给contained_tags变量时,所有的测试都会通过。胁迫/不强迫映射对象进入列表是什么原因造成了这种行为上的差异?

代码语言:javascript
复制
class TestQueryStringTags(SimpleTestCase):
    '''Verify that any tags [...] within a search query string are cleaned'''

    def setUp(self):
        self.submitted_tags = [
            "-- [  Pyth %    on]",
             "[_%!---%%%django__+___ -@& rest_framework  (^)   ]  [api]",
            "[-- django               models  ]         ",
            "$))[[django-views]]",
            " [                  ] [] >>>> [[]]  [$&))( @%)     ]"
        ]

        self.cleaned_tags = [
            ["python"], ["django-rest-framework", "api"],
            ['djangomodels'], ["django-views"], None
        ]

    def test_searched_query_tags(self):
        for i, tag_query in enumerate(self.submitted_tags):
            with self.subTest(i=i, tag_query=tag_query):
                tags = retrieve_query_tags(tag_query)
                self.assertEqual(tags, self.cleaned_tags[i])
代码语言:javascript
复制
def retrieve_query_tags(string):
    contained_tags = list(map(
        lambda match: re.sub(r"[*!#$&'\"()%*+,/:;=?@\[\]<>\s]", "", match[0])
        , re.finditer(r"(?<=\[)[^\[\]]+(?=\])", string)
    ))
    if all(not tag for tag in contained_tags):
        return None
    tag_content = list(map(
        lambda match: "-".join(
            re.findall(r"([a-zA-Z]+)", match.lower())
        ), contained_tags
    ))[:2]
    return tag_content
EN

回答 1

Stack Overflow用户

发布于 2022-04-21 22:12:31

您的cleaned_tags变量是一个包含值的list对象,但是map()函数返回一个迭代器对象,该对象将在每次调用__next__()方法时生成值,但只能迭代一次--超过一次。强制将其存储到list(map(…)中,将所有__next__生成的值存储到list容器对象中(如果需要,可以多次遍历这些值,但消耗更多的内存)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71961335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档