前几天,微信学习群里有个小伙伴在看书时遇到了这样一个问题,在群里提问,看下图:

这是常用的 matplotlib 库,只是一般我们调用 plot 方法绘图时,不会去关心它的返回值。然而 plt1, = plt.plot(...) 这种写法是什么意思?被赋值的变量和赋值符号之间多了个逗号。

我的确从来没关心过 plot 函数的返回值是什么,所以当我看到这个截图的时候,第一反应是以为返回值有多个,代码只取了第一个,剩余的被忽略了。这种情况一般都是用 _ 做占位符,来忽略不关心的值。

占位符 _ 也可以省略吗?我迅速打开 PyCharm 验证了一把,事实证明,_ 不可以省略,我的想法是错了。

为了查明原因,我去查了 matplotlib 的源码,发现 plot 函数返回的是一个列表,源码如下:

def plot(self, *args, **kwargs):
    scalex = kwargs.pop('scalex', True)
    scaley = kwargs.pop('scaley', True)     if not self._hold:
        self.cla()
    lines = []     kwargs = cbook.normalize_kwargs(kwargs, _alias_map)     for line in self._get_lines(*args, **kwargs):
        self.add_line(line)
        lines.append(line)     self.autoscale_view(scalex=scalex, scaley=scaley)
    return lines

我这才反应过来,这是列表拆包啊。变量后面的逗号,是因为返回的列表中只有一个元素,所以拆包的时候变量后面要加个逗号,标明这是拆包,不是赋值。

代码中,我们用的比较多的是元组拆包,各种书里也多是讲元组拆包,所以忽略了列表也是可以拆包的。看下面的例子:

x, y = [1, 2]
print(x, y)

输出:

1 2

不仅是元组和列表,所有可迭代对象都可以拆包。我们可以自定义一个可迭代对象(只需要实现其协议即 __iter__ 方法即可),来验证一下,代码如下:

class TestClass:
    def __init__(self):
        self._list = range(3)     def __iter__(self):
        for i in self._list:
            yield i x, y, z = TestClass()
print(x, y, z)

输出:

0 1 2

Python:列表也能拆包?的更多相关文章

  1. python 列表排序

    转自http://www.iplaypython.com/jinjie/jj114.html reverse()方法 将列表中元素反转排序,比如下面这样>>> x = [1,5,2, ...

  2. python列表、元祖、字典

    python列表   ['a','1','vs2']       里面的值可以改 python元祖   ('a','1','css','sdf12')   里面的值不能改 python字典   {'s ...

  3. Python列表、元组、字典和字符串的常用函数

    Python列表.元组.字典和字符串的常用函数 一.列表方法 1.ls.extend(object) 向列表ls中插入object中的每个元素,object可以是字符串,元组和列表(字符串“abc”中 ...

  4. Python 列表

    python 列表 列表的特点 1.列表是一种可变的数据类型,这点是跟元组有区别的 2.列表中的值是有序的,并且可存放重复的值,这点跟set有区别的 3.python中的列表类似于其它语言中的数组 4 ...

  5. python 列表生成器

    python 列表生成器 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 一个循环 在C语言等其他语言中,for循环一般是这样的 ...

  6. [转载] Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结

    创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...

  7. Python 列表如何获得一个指定元素所在的下标

    在使用Python3.4读取txt数据到列表,由于编码问题,读取到的数据通常会出现'\ufeffX'(x为你想要的数据).这时候如果需要把列表中的数据由字符串转换到数值型的数据的进行数据分析的话就会出 ...

  8. python列表的常用操作方法

    主要介绍了Python中列表(List)的详解操作方法,包含创建.访问.更新.删除.其它操作等,需要的朋友可以参考下. 1.创建列表.只要把逗号分隔的不同的数据项使用方括号括起来即可 List = [ ...

  9. !!对python列表学习整理列表及数组详细介绍

    1.Python的数组分三种类型:(详细见 http://blog.sina.com.cn/s/blog_6b783cbd0100q2ba.html) (1) list 普通的链表,初始化后可以通过特 ...

  10. (转载)Python 列表(list)操作

    (转载)http://blog.csdn.net/facevoid/article/details/5338048 创建列表sample_list = ['a',1,('a','b')] Python ...

随机推荐

  1. 重置 oschina 的CSS

    嗯, 目前只是改了一下OSChina的几个主要DIV宽度而以,还是很粗糙, 以后会慢慢改进的. ---------------------------------------------------- ...

  2. a note of R software write Function

    Functionals “To become significantly more reliable, code must become more transparent. In particular ...

  3. g++能过,c++过不了

    可能原因: 1.在递归的时候,递归函数中忘记加返回return.(详见Wrong Answer,Memory Limit Exceeded) 代码1:错误 g++--------accepted c+ ...

  4. 一种解决 MacBook 里的 App Store 无法登录的问题

    刚刚买回来的 2018 款带有 touchbar 的 MacBook Pro 15 inc 在用 App Store 安装 app 时一直无法登录成功(网络链接都是好的),导致软件都无法更新,折腾了挺 ...

  5. Convolutional Neural Networks for Visual Recognition 1

    Introduction 这是斯坦福计算机视觉大牛李菲菲最新开设的一门关于deep learning在计算机视觉领域的相关应用的课程.这个课程重点介绍了deep learning里的一种比较流行的模型 ...

  6. freeMarker(十三)——XML处理指南之揭示XML文档

    学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 前言 尽管 FreeMarker 最初被设计用作Web页面的模板引擎, ...

  7. bzoj 3689: 异或之 Trie+堆

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=3689 题解: 利用一个优先队列存储当前取到的数 然后再写一颗支持查找异或的k大值的Tri ...

  8. 在CentOS 7上安装Node.js的4种方法(包含npm)

    Node.js和Javascript有着千丝万缕的联系,可以说Node.js让Javascript显得从未如此强大.好吧…微魔其实是个门外汉…但是这并不能阻碍微魔学习探索未知的信心~今天在国外闲逛,看 ...

  9. 统计不同的单词(map应用)

    题目描述: 输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另一个单词.在判断是否满足条件时,字母不区分大小写,但在输出时应保留输入中的大小写,按字典序进行排列(所有 ...

  10. hdoj1113(字符串map应用)

    #include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...