Python: First Glimpse
Python: First Glimpse初学Python,做了写笔记,于是分享之。
对C++程序员来说,第一个新颖有趣的地方是什么?
for循环
for有什么不一样?
for…in遍历sequence中的元素
sequence是什么呢?
1. tuple: 圆括号()
2. list: 方括号[]
3. generator:相对于没有中括号的list,每次产生一个iterator
generator是什么?
使用yield抛出iterator的function返回值类型为generator
1. 在函数中使用yield 用来抛出iterator
2. 从底层来看,相当于自动化生成了next()函数,并保存对象状态
举例:
l sum(i*i for i in range(10))
l set(word for line in page for word in line.split())
l list(data for i in range(len (data)-1,-1,-1))
l (i *i for i in a if i >3)
l 可以理解成:没有中括号的列表
通常yield和外部的for搭配着使用
举例:
¡ def reverse(data):
¡ for index in range(len(data)-1,-1,-1):
¡ yield data
¡ for char in reverse("golf"): print char,
列表推导式是什么?
即利用for + sequence来产生列表的一种方法。
例如:
其余的部分呢?
请查看python绝对简明教程
http://wiki.woodpecker.org.cn/moin/PyAbsolutelyZipManual
函数式编程与数据为中心
函数式编程的最重要的概念是什么呢?
1. sequence:体现着数据为中心
2. 函数
a) 匿名函数,lambda函数
b) 函数对象,闭包
为什么说sequence是重要的概念?
1. 且看map函数:map(function,sequence,)
2. 再看reduce函数:reduce:reduce(function,sequence,)
3. 最后看filter函数:filter(function,sequence)
这里所有的数据都是放在sequence中的,sequence相当于所有数据的通用容器。这也是数据为中心的体现。
而函数就直接通过map,reduce,filter作用在数据上,而弱化具体的控制流。
与数据为中心相对应的概念是什么?
以数据为中心,关注点在数据(sequence)以及操作(函数对象)
与之对应:
面向过程的程序设计,关注点在控制流。
面向对象的程序设计,关注点在微系统实体的建模。
以数据为中心,我们就要弱化对控制流的关注。
把控制流以及算法封装在函数对象内部。
这里也插一个题外话,GNU linux的设计思想,在shell层面,也是以数据为中心。
GNU小工具 ——》 函数对象
pipe,字符流,文件流 ——》 sequence
这样具体的算法和控制流,就被封装在GNU似的小工具中。
数据通过pipe,字符流,文件流,被GNU小工具转换着。
类型与对象
万物皆对象 这不是扯么?
这里的对象其实没有几个,请看下图
(出处:http://wiki.woodpecker.org.cn/moin/PyTypesAndObjects)
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://docs.google.com/File?id=dgr2vshv_145hhkf2gg4_b
对象也就两种:(说万物皆对象,是聪明人在忽悠人,逃避问题。)
1. type对象(经type()函数返回的对象)
a) 图中第一,二列
2. non-type对象(经type()函数返回types对象(例如list)的对象)
a) 图中第三列
图中两种线:
1. “是——的类” (图中实线)
a) 由继承关系括号指定
b) 由__bases__查看
c) 只有类对象才有__bases__属性
2. “是——的实例”(图中虚线)
a) 由__metaclass__指定
b) 由__class__查看
如果让我来定义一个新的type对象:
class mylist(object):
__metaclass__ = type
题外话
function对象(经type()函数返回
页:
[1]