php的$和->让人输入的手疼(php确实非常简洁和强大,适合web编程),ruby的#、@、@@也好不到哪里(oo人员最该学习的一门语言)。
python应该是写起来最舒服的动态语言了,一下是一些读书笔记,最后会介绍一下高级的用法:mixin、open class、meta programming和aop。
文中有些地方是用2.7开发的,如果您安装的是3.x,有几点需要注意:
print "xxx" 要换成 print("xxx")
__metaclass__ = type 删除掉。
你好,世界!
乘方
变量
注:这里的var = xxxx不叫变量赋值,而叫变量绑定,python维护了一个符号表(变量名)以及符合对应的值,这个对应关系就叫做绑定,一个符号可以绑定任意类型的值。
获取用户输入
注:input接受的是python代码,输入中可以访问当前执行环境中的变量,如果想获取原始输入需要使用 raw_input。
函数定义
强类型
javascript和php是弱类型的,python和ruby是强类型的。弱类型允许不安全的类型转换,强类型则不允许。
字符串
序列
这里先介绍三种序列:列表、元祖和字符串。
序列通用操作
可变的列表
不可变的元祖
字符串格式化
字典
print 语句
序列解包
bool值
bool运算
语句块
:开始语句快,缩进的所有内容都是一个语句块。
三元运算符
相等比较
循环
pass、exec和eval
形参和实参之间是按值传递的,当然有些类型的值是引用(对象、列表和字典等)。
几个模块相关的规则:
一个文件代表一个模块。
可以用import module导入模块,也可以用form module import member导入模块的成员。
如果导入的是module,必须使用module.member进行访问;如果导入的member,可以直接访问member。
导入的module或member都会变成当前module的member。
b.py
a.py
test.py
输出
先上一张图

几个规则:
一切都是对象,python中一切都是对象,每个对象都包含一个__class__属性以标记其所属类型。
每个对象(记得一切都是对象啊)都包含一个__dict__属性以存储所有属性和方法。
每个类型都包含一个__bases__属性以标记其父类。
属性和方法的访问规则:依次搜索instance、子类、父类、父类的父类、直到object的__dict__,如果找到就返回。
属性和方法的设置规则:直接设置instance.__dict__。
以上属性和方法访问或设置规则没有考虑“魔法方法”,下文会解释。
示例
绑定方法和未绑定方法
绑定方法已经绑定了对象示例,调用的时刻不用也不能传入self参数了。
注:使用对象访问实例方法为何会返回绑定方法?这个还得等到学完“魔法方法”才能解释,内部其实是拦截对方法成员的访问,返回了一个callable对象。
私有成员
难怪访问不了了,名称已经被修改了,增加了访问的难度而已。
多重继承
如果继承的多个类型之间有重名的成员,左侧的基类优先级要高,上例子base2会胜出。
接口那里去了,鸭子类型比接口更好用。
调用父类
详细内容参考:http://www.rafekettler.com/magicmethods.html。
对象构造相关:__new__、__init__、__del__。
运算符重载:所有运算符都能重载。
属性访问。
集合实现。
可调用对象,像方法一样调用对象。
资源管理
对象描述符。
掺入模块:playable.py
掺入目标模块:test.py
python在作用域方面非常接近javascript,类型和对象系统也有几份相似(虽然javascript是基于原型的),javascript、php、python和ruby这几门语言交叉学习会带来意想不到的收获。·