首先声明一点,题目是多重赋值,这里将讲两个基本上可以称的上python独有的概念以及它们的使用方式即多重赋值和python生成器。
一、多重赋值
在大家未接触python之前,在使用其他语言的时候,几乎每个人都做过一个值交换的练习。即把A的值赋个B,把B的值赋给A。
拿java举例代码应该如下:
public class demo {
public static void main(String[] args) {
int a = 4;
int b = 5;
int tmp = 0;
tmp = a;
a = b;
b = tmp;
System.out.println("a-->"+a+"\tb-->"+b);
}
}
而python实现就不用这么麻烦可以直接这么写
>>> a = 3
>>> b = 4
>>> a,b = b,a
python的这种实现从代码行数来讲,确实比java,C,C++等要少。据我了解,不仅仅python具有这种写法,google的go语言也可以这么写。
当然了,在这里面要说明一点,我们不能根据这一点就去说python比java强或是什么语言比什么语言牛。他们各自有各自的特点,各自有各自的应用的领域,应该本着
存在的就是合理的。
二、生成器
在讲生成器时,我提一句迭代器。从直观上讲,迭代器就是可以调用next()进行值遍历。python生成器的概念即为包含yield语句的函数会被特地编译成生成器,当函数被调用时,他们返回一个生成器对象,这个对象支持迭代器接口。具体事例如下:
def demo(n):
for i in range(n):
yield i*2
for i in demo(5):
print i
用法就是这么用的。其实如果单纯的就像上面的例子来讲的话,看不出它有什么高明之处,也体现不出来它的作用。这样吧,举个极端的例子吧。比如有一个很大很大的日志文件我们需要读取。这样我们如果用程序去读的话用到的手段无非就是循环的一段段去读吧,大家都知道,如果读的量特别大的话,是很耗资源。那我们可以不可以换种方式,就是说我们把很大很大的日志给它才拆分,分成好多块。其实即使不拆分,使用生成器也比使用循环要好,因为从他们的实现来讲就可以区别出来。生成器是可以暂停的,是一下一下的访问的,在调用的时候你调用一次next()它去访问一下。我觉着还是这么讲吧,循环是一次性去那么多,生成器是一个一个的去取,这样讲不一定可以完美的解释这个概念,但是道理基本无异。