分类: Python/Ruby
2011-01-06 10:46:49
总纲
2011年1月5日星期三
14:31
1 |
类似PHP语言,处于发展初期,版本尚不稳定,函数库/类库较杂且无序,框架发展初期,暂时只有Django框架可用。 |
2 |
支持多根继承(PHP,JAVA是单根继承,C++是多根继承) |
3 |
支持运算符重载(PHP,Java不支持,C++支持) |
语法
2011年1月5日星期三
16:35
1 |
不使用Begin/End 或 { / } 标识语句组,而是使用缩进标明语句组 |
If x>5 : print("x>5") Print("OVER") |
2 |
简单输出 print 函数,可使用多个参数 |
|
3 |
弱类型,与PHP相同 |
|
4 |
变量不需要$开头(貌似只有PHP的变量有个特殊的开头) |
|
5 |
大小写区分(这个已经是定例了) |
|
6 |
注释 # 开头,可以单行,也可以放在行尾,这个无所谓了. |
|
7 |
条件语句 if (expr): 语句组 elif (expr): 语句组 else: 语句组 |
注意:没有endif, 同时,else也要加冒号 |
8 |
空语句 pass |
因为空行(即使缩进了)和注释 都不算语句 |
9 |
|
|
常量
2011年1月5日星期三
16:41
1 |
整数 |
支持长整数(极长,不用考虑极限) |
2 |
浮点 |
支持科学计数法 |
3 |
字符串 |
可使用单引号或双引号(与PHP相同) 转义与PHP相同 字符串也可以当数组用(这个当然了,PHP也是如此),下标从0开始(这个还是当然的)
注意 字符串是常量,不允许赋值 即 str='abc';str[0]='X' 会出错 字符串运算结果也是常量,仍不允许赋值 y='abc'+'def';y[0]='X' 同样出错 |
4 |
复数 |
2+3j 这个太诡异了,平时也不太常用,用到的时候再查手册吧,也不难 |
5 |
空 |
None (注意,区分大小写,PHP里是null) 这个常量是有常量类型的,NoneType,这个类型只有这么一个值 |
6 |
布尔 |
True/False,用1(非零)和0(空数组,空字符串,None,等)也可以,自动转换 |
7 |
强制类型转换 |
int,float,str |
|
|
|
运算符
2011年1月5日星期三
16:44
Python的运算符要比PHP多
1 |
** |
幂 |
2 |
% |
取余 |
3 |
|
字符串支持* |
4 |
+ |
字符串支持+ 列表合并 |
5 |
!= |
不等于, 特殊说明一下,<>原来也是不等于的意思,但以后可能要废止,还是别用了 |
6 |
== |
相等比较,这个与PHP相同 ,= 是赋值 |
7 |
逻辑运算 |
and ,or ,not 不允许使用&&,||,! (PHP允许使用两种形式) and 如果左式为真(即非零),则返回左式,否则返回右式 or 如果左式不为真(零,空等),则返回左式,否则返回右式 not 返回的倒是True/False |
8 |
in |
判断左式是否包含在右式中 (右式通常是字符串,列表等) |
常用全局函数
2011年1月5日星期三
16:38
1 |
print(exprs) |
输出 |
|
2 |
type(expr) |
返回变量/表达式的类型 |
|
3 |
complex(x,y) |
返回复数 |
|
4 |
id(expr) |
返回变量/常量/表达式 的存储地址 这个有点意思. |
x=2 y=x print id(x),id(y),id(2) 这会显示三个相同的地址,表明Python维护了一个常量表(值不重复),同时如果将常量赋值给变量,那么变量的ID体现的对应常量的存储地址,即变量本质是一个指针
此处注意:字符串是常量,但列表是变量 |
5 |
raw_input('提示语') |
提示之后,要求用户输入一个值,这个值作为函数的返回值 |
在Python2中,还有一个input函数,这个慎用,在Python3中,raw_input将改名为input |
6 |
len(str) |
返回字符串的长度 返回列表长度 |
|
7 |
range(1,5) range(10) |
生成一个列表 |
包括1,不包括5 (这个与字符串的索引相似) 包括0,到9,不包括10 如果有第三个参数,第三个参数是步长 |
8 |
del |
删除一个列表中的元素(可以删除一个切片) 删除一个变量的定义 |
|
9 |
execfile |
执行外部Python文件 |
|
10 |
eval |
计算 字符串参数 代表的表达式的值 |
|
|
exec() |
执行字符串参数代表的语句 |
|
切片
2011年1月5日星期三
17:27
这个用于字符串,列表
str='0123456789'
str[0:5] 将返回 01234 即下标0开始,到下标4截止(注意:不包括5)
str[5:7]将返回 56 (注意,还是不包括7)
str[:5] 忽略第一个参数,从头开始
str[5:] 忽略后一个参数,到尾截止
str[:] 这个与str相同 此处注意,字符串是常量 , 全切片后与原字符串相同(使用同一存储空间), 而列表全切片表示复制一个相同的列表,不使用相同的存储空间
-1表示最后一个元素
自定义函数
2011年1月5日星期三
16:57
def
这个除了语法有区别外,也没什么
参数可以有默认值(从后面开始)
调用时,可以指定调用
如
func(x=1,y=2,z=3)
包/库
2011年1月5日星期三
17:00
1 |
包的导入 |
import XXX |
复杂用法 from XXX import FFF 导入部分内容,且导入的方法可以直接使用(不再需要前缀) |
2 |
math |
数学包 |
pi,log10,sin,e,cos,exp,pow,sqrt,fabs好了,更多的看看手册吧(尽管是英文的,但这些也不难) |
3 |
string |
字符串包 |
find,lowercase,uppercase,digits,split |
4 |
random |
随机数生成器 |
random, |
5 |
os |
操作系统相关 |
|
6 |
sys |
系统相关 |
argv,exit |
7 |
pickle |
持久化相关 |
|
8 |
copy |
对象复制相关 |
|
9 |
|
|
|
运行时的环境
2011年1月5日星期三
17:01
1 |
__main__ |
这是主程序(最开始执行的那一个代码段)的名称 |
lambda
2011年1月5日星期三
17:08
对于 PHP程序员来说,这是个难点,因为PHP里没这东西
语法
lambda 参数表:表达式
参数表可以有多个参数,但通常是2个
整个lambda是个表达式,即它返回一个值,这个值是个函数
例func=lambda x,y : x+y
for循环
2011年1月5日星期三
17:38
这个与PHP是不同的
for x in 字符串/切片/数组/序列/… :
语句组
列表
2011年1月5日星期三
18:22
这个与PHP中的无键数组类似
[exp1,exp2,…]
允许异构
列表是一个对象,有自己的方法
append(元素)
insert(位置,元素)
extend(另一个列表) 列表追加, 注意,这个方法返回None, 原列表变量更新为合并后的列表
index(元素) 取索引值
pop()
join(
带循环的列表
[ 带item的表达式 for item in 另一个列表]
序列
2011年1月5日星期三
18:47
以() 包围 (注,由于语法原因,只包含一个元素的序列要写为 (x,)
多个元素的序列,使用时可省略外围括号
a,b,c=c,b,a #对三个变量进行值的交换
可索引
可切片
内容值不可修改,常量 这与列表是不同的.
索引
2011年1月5日星期三
18:25
字符串,列表
都是从0开始
-1表示最后一个元素
列表的特殊问题
2011年1月5日星期三
18:36
1 |
列表的全切片 表示复制 |
2 |
列表作为函数参数,这将在函数内修改列表的元素,(这很讨厌) 如不想被修改,在调用时,使用全切片 |
|
|
特殊的布尔表达式
2011年1月5日星期三
18:52
x>y>z 相当于 x>y and y>z
x x>=y>=z x<=y<=z x op1 y
op2 z
字典
2011年1月5日星期三
18:53
{key:value,key2:value2}
这个就是PHP中的数组,允许 复杂的键,如列表
方法
copy(),全复制
get(key,default) 按键取值,如没有此元素,返回缺省值
文件
2011年1月5日星期三
18:58
文件是一个独立的数据类型
f=open(文件名,'w')
方法
write(content)
close()
read
readline()
readlines()
输出重定向到文件
print >>f , content
字符串格式化
2011年1月5日星期三
19:00
现方法是
'字符串' % 替换值的序列
替换的方式与C相同 %3.5f
以后要修改成函数方式
持久化
2011年1月5日星期三
19:02
这就是PHP中的序列化
只支持写入文件
pickle.dump(表达式,文件) 将一个表达式的值存储到文件中
变量=pickle.load(文件) 反向取回
注意:存入顺序要与取出顺序相同
异常
2011年1月5日星期三
19:04
这个大家都有
try:
语句组
except 异常类型,异常变量:
指定异常的处理
except:
其它异常处理
else:
没有异常时处理
raise 用在异常处理中,将此异常重新抛出以便其它异常处理程序处理
类
2011年1月5日星期三
19:11
与PHP的区别
多根继承,慎重使用,尤其是在多个父类中存在同名方法时,其实是有个寻路规则的,但太麻烦
没有protected属性与方法
__开头的方法和属性是私有的(但不能以__结尾) 这个其实也不安全
其它方法和属性都是公有的
_开头的方法 约定俗成是 保护的,但Python本身并不保护.
类也是一个对象,也有自己的属性和方法
对象的赋值是地址赋值,如果想复制,使用copy模块的copy方法,浅拷贝,deepcopy 深拷贝
可以通过外部程序为类增加属性/方法 注意,方法也是一个属性
没有this 但有个替代的self,麻烦得很
定义所有方法时,第一个参数要是self ,这样才能使用
构造方法名为 __init__
析构方法名为 __del__ (这个不推荐使用,原因在于blablablabla)
__setattr__ 当为对象设置一个非现有属性时发生
__getattr__ 当向对象获取一个非现有属性时发生
__delattr__ 当删除对象的一个非现有属性时发生
构造方法不会自动调用父类的构造 方法(父太多了,不知道都需要调用哪个),自行调用吧.
操作符重载
2011年1月5日星期三
19:22
__add__方法 重载 + 操作符
__sub__方法重载 - 操作符
__mul__方法重载 * 操作符 当对象在* 左边时
__rmul_方法重载 * 操作符 当对象在 * 右边时
__str__方法 重载str全局函数,以及隐含的转换
类的继承
2011年1月5日星期三
19:35
class DerivedClass(BaseClass,...):
方法的寻路使用了深度优先算法
调用父类的方法
父类名.方法名(参数)
修饰符
2011年1月6日星期四
9:37
@staticmethod
修饰下一个方法为静态方法 (第一个参数不作要求)
@classmethod
修饰下一个方法为类方法 (第一个参数是类,注意,类也是一个对象)
其它
2011年1月5日星期三
20:14
使用
Microsoft Office OneNote 2007 进行创建
可在一个位置放置所有笔记和信息