我是靠谱客的博主 傻傻发带,最近开发中收集的这篇文章主要介绍迭代解包(元组解包、元组拆包)Iterable Unpacking Extended Iterable Unpacking,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


迭代解包,在Python的官方文档里面提的是:

Extended Iterable Unpacking

(https://www.python.org/dev/peps/pep-3132/)

有些情况下,有做元组解包,元组拆包之类的,都是一些翻译因素。其实都是一类意思,迭代解包比元组解包覆盖的更全一些。

当然为什么叫元组** ,这个就没有发现为什么了,但是这个并不影响我们的使用和理解,只是一个题外话。


元组解包可以应用到任何可迭代对象上,唯一的硬性要求是,被可迭代对象中的元素数量必须要跟接受这些元素的元组的空档数一致。

也可以使用用 * 来表示忽略多余的元素。

这种方式的优点在于:更好的赋值,更好的获取迭代对象中的某个值



一般的迭代对象分为:元组,列表,字典,字符串等。如果有一些不能明确的对象,可以通过以下方式进行判断,是否为可迭代。
判断对象是否可迭代:


    >>> from collections import Iterable
    >>> isinstance('abc', Iterable)
    True
    >>> 


最好辨认的元组解包的形式就是平行赋值


    >>> num = (3, 4)
    >>> x, y = num
    >>> x
    3
    >>> y
    4
    >>> 


被迭代元素数量和接受元素的参数数量一致,如果不一致就会抛出异常:


    >>> x, y, z = num
    Traceback (most recent call last):
      File "<pyshell#25>", line 1, in <module>
        x, y, z = num
    ValueError: not enough values to unpack (expected 3, got 2)
    >>> 


可以使用*来忽略多余的元素(Python3对于*的扩展)


    >>> data, *rest = range(5)
    >>> data
    0
    >>> rest
    [1, 2, 3, 4]
    >>> 


在进行解包的时候,我们并不总是对元组里所有的数据都感兴趣, _    占位符能帮助处理这种情况:


    >>> import os
    >>> _, filename = os.path.split('/home/test/path/filename.pdf')
    >>> filename
    'filename.pdf'


如果做的是国际化软件,那么 _ 可能就不是一个理想的占位符,因为它也是gettext.gettext 函数(翻译函数)的常用别名。在其他情况下, _ 会是一个很好的占位符


嵌套元组解包:
-------


    >>> data = ['ABC', 40, 2.2, (2017, 12, 21)]
    >>> name, age, grade, date = data
    >>> name
    'ABC'
    >>> date
    (2017, 12, 21)

最后

以上就是傻傻发带为你收集整理的迭代解包(元组解包、元组拆包)Iterable Unpacking Extended Iterable Unpacking的全部内容,希望文章能够帮你解决迭代解包(元组解包、元组拆包)Iterable Unpacking Extended Iterable Unpacking所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部