Python 数据处理2.0.2

来源:互联网 发布:分布式数据库架构 编辑:程序博客网 时间:2024/06/10 01:21

今天有人问到了一个关于可变参数的问题,代码如下:

records=[    ('foo',1,2),    ('bar','hwllo'),    ('foo',3,4),]def do_foo(x,y):    print('foo',x,y)def do_bar(s):    print('bar',s)for tag,*args in records:    if tag=='foo':        do_foo(*args)    elif tag=='bar':        do_bar(*args)输出结果:foo 1 2bar hwllofoo 3 4

这段代码实际上是一本书里面,不过还是相当有趣的。要理解这段代码,首先先看下以下代码:

x,*args=[1,3,2,5,0]print(x)print(*args)

他家不妨猜猜x和*args的值是多少,了解可变参数的人肯定知道x=1,args=[3,2,5,0]
为什么会是这样的,具体*args的底层实现我确实不知道,但可以猜出,args可能靠循环加寻址实现的。有兴趣的人可以去看下。现在回过头来,看最上面的一段代码。输出结果为什么是那样的?

**首先**records是一个表,它存有三个元组的元素,当进行for循环时,先将第一个元组元素拿出来,也就是(’foo’,1,2),然后将这个元组赋给tag,*args,最后进行if判断输出,所以结果就是显示的那样。很简单的。

原创粉丝点击