<tfoot id='TrETT'></tfoot>

    <legend id='TrETT'><style id='TrETT'><dir id='TrETT'><q id='TrETT'></q></dir></style></legend>
  1. <i id='TrETT'><tr id='TrETT'><dt id='TrETT'><q id='TrETT'><span id='TrETT'><b id='TrETT'><form id='TrETT'><ins id='TrETT'></ins><ul id='TrETT'></ul><sub id='TrETT'></sub></form><legend id='TrETT'></legend><bdo id='TrETT'><pre id='TrETT'><center id='TrETT'></center></pre></bdo></b><th id='TrETT'></th></span></q></dt></tr></i><div id='TrETT'><tfoot id='TrETT'></tfoot><dl id='TrETT'><fieldset id='TrETT'></fieldset></dl></div>

      • <bdo id='TrETT'></bdo><ul id='TrETT'></ul>
    1. <small id='TrETT'></small><noframes id='TrETT'>

    2. 为什么在Python3.8之前,返回语句中的星号可迭代解压缩是不带括号的无效语法?

      Why is starred iterable unpacking in a return statement invalid syntax without parentheses before Python 3.8?(为什么在Python3.8之前,返回语句中的星号可迭代解压缩是不带括号的无效语法?)
    3. <legend id='VEzKN'><style id='VEzKN'><dir id='VEzKN'><q id='VEzKN'></q></dir></style></legend>
          <tbody id='VEzKN'></tbody>

          • <small id='VEzKN'></small><noframes id='VEzKN'>

            <i id='VEzKN'><tr id='VEzKN'><dt id='VEzKN'><q id='VEzKN'><span id='VEzKN'><b id='VEzKN'><form id='VEzKN'><ins id='VEzKN'></ins><ul id='VEzKN'></ul><sub id='VEzKN'></sub></form><legend id='VEzKN'></legend><bdo id='VEzKN'><pre id='VEzKN'><center id='VEzKN'></center></pre></bdo></b><th id='VEzKN'></th></span></q></dt></tr></i><div id='VEzKN'><tfoot id='VEzKN'></tfoot><dl id='VEzKN'><fieldset id='VEzKN'></fieldset></dl></div>

                <bdo id='VEzKN'></bdo><ul id='VEzKN'></ul>
              • <tfoot id='VEzKN'></tfoot>
                本文介绍了为什么在Python3.8之前,返回语句中的星号可迭代解压缩是不带括号的无效语法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                Python语言(特别是3.x)允许对迭代文件进行非常通用的解包

                就是一个简单的例子
                a, *rest = 1, 2, 3
                
                这些年来,这种拆包已经逐渐推广(例如,参见<[3-0]和PEP 448),允许它在越来越多的情况下使用。因此,我惊讶地发现以下语法在Python3.6中是无效的(在Python3.7中仍然是如此):

                def f():
                    rest = [2, 3]
                    return 1, *rest  # Invalid
                

                我可以将返回的元组封装在括号中,如下所示:

                def f():
                    rest = [2, 3]
                    return (1, *rest)  # Valid
                

                我在return语句中使用这一点似乎很重要,因为

                t = 1, *rest
                

                确实是合法的,结果是带括号和不带括号的结果相同。

                Python开发人员只是忘记了大小写,还是有什么原因导致大小写是无效语法?

                我为什么关心

                这破坏了我认为我与Python语言之间的一个重要约定。请考虑以下(也是有效的)解决方案:

                def f():
                    rest = [2, 3]
                    t = 1, *rest
                    return t
                
                通常情况下,当我有这样的代码时,我认为t是一个临时名称,我应该可以简单地用它的定义替换底线中的t就可以去掉它。但在这种情况下,这会导致无效代码

                def f():
                    rest = [2, 3]
                    return 1, *rest
                

                当然,必须在返回值两边放上括号没什么大不了的,但通常只需要额外的括号来区分几个可能的结果(分组)。这里并非如此,因为省略括号不会产生其他一些不需要的行为,而是根本不会产生任何行为。

                更新

                从Python 3.8开始(请参阅this list上的第7项),上面讨论的通用语法现在有效。

                推荐答案

                根据this commit对Python3.2的评论,我怀疑这是意外。

                提交使赋值表达式能够接受testlist_star_expr结果(允许不带括号的解包),但使返回语句获得testlist结果。我怀疑提交刚刚错过了这个位置(可能还有其他位置,但我现在主要关注return_stmt生产)。

                我继续修改了Python语法/语法文件以允许这样做。所有测试继续通过,包括test_grammar.py文件中的测试(但这似乎不是非常详尽)。

                如果您感兴趣,请访问this is the change I made。欢迎克隆或下载my fork。

                更新:我已提交bpo issue和pull request退货(和收益率)解包。

                这篇关于为什么在Python3.8之前,返回语句中的星号可迭代解压缩是不带括号的无效语法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                相关文档推荐

                GUI Freezes while downloading PyQt5 and Pytube(GUI在下载PyQt5和Pytube时冻结)
                How to solve memory issues while multiprocessing using Pool.map()?(如何解决使用Pool.map()进行多处理时的内存问题?)
                Python - How to use FastAPI and uvicorn.run without blocking the thread?(Python-如何使用FastAPI和uvicorn.run而不阻塞线程?)
                How to increment a shared counter from multiple processes?(如何从多个进程递增共享计数器?)
                Using pika, how to connect to rabbitmq running in docker, started with docker-compose with external network?(使用pika,如何连接运行在docker中的rabbitmq,从docker开始-与外部网络连接?)
                How to use .rolling() on each row of a Pandas dataframe?(如何对 pandas 数据帧的每一行使用.roll()?)

                  • <small id='t1o8m'></small><noframes id='t1o8m'>

                      <bdo id='t1o8m'></bdo><ul id='t1o8m'></ul>

                      <tfoot id='t1o8m'></tfoot>
                      <i id='t1o8m'><tr id='t1o8m'><dt id='t1o8m'><q id='t1o8m'><span id='t1o8m'><b id='t1o8m'><form id='t1o8m'><ins id='t1o8m'></ins><ul id='t1o8m'></ul><sub id='t1o8m'></sub></form><legend id='t1o8m'></legend><bdo id='t1o8m'><pre id='t1o8m'><center id='t1o8m'></center></pre></bdo></b><th id='t1o8m'></th></span></q></dt></tr></i><div id='t1o8m'><tfoot id='t1o8m'></tfoot><dl id='t1o8m'><fieldset id='t1o8m'></fieldset></dl></div>

                        <legend id='t1o8m'><style id='t1o8m'><dir id='t1o8m'><q id='t1o8m'></q></dir></style></legend>

                          <tbody id='t1o8m'></tbody>